<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Django外鍵反向查詢機制解析

      Django中不使用 _set 語法,是因為Django在未顯式定義 related_name 時,為多個指向同一模型的外鍵自動生成了唯一的反向名稱。

      ?? 原理分析:為什么你的代碼可以工作

      在你的 ChengWuKaoQinBiao 模型中,有兩個外鍵指向了 JiaoLuBiao

      class ChengWuKaoQinBiao(models.Model):
          """
          職工乘務交路考勤表
          """
      
          date_start = models.DateField(verbose_name="本月結算始發日期", default=timezone.now)
          date_end = models.DateField(verbose_name="本月結算終到日期", default=timezone.now)
          employee_jiaolu_team = models.ForeignKey(
              Employee, on_delete=models.CASCADE, verbose_name="乘務員"
          )
          jiaolu_team = models.ForeignKey(
              Team, on_delete=models.CASCADE, verbose_name="乘務時所在班組"
          )
          jiaolu_zhiwu = models.ForeignKey(
              ZhiWu, on_delete=models.CASCADE, verbose_name="乘務時職務"
          )
          # train_jiaolu = models.JSONField(verbose_name='乘務車次', default=list)
          train_jiaolu = models.ForeignKey(
              JiaoLuBiao, on_delete=models.CASCADE, verbose_name="乘務車次"
          )
          ti_cheng_employee = models.ForeignKey(
              Employee,
              on_delete=models.CASCADE,
              verbose_name="替乘人員",
              blank=True,
              null=True,
              related_name="ti_cheng_model",
          )
          calculate_cheng_wu_fei = models.BooleanField(
              default=True,
              verbose_name="計算乘務費",
              help_text="勾選表示此乘務記錄計入乘務費計算"
          )
          calculate_shi_ji_gua_gou = models.BooleanField(
              default=True,
              verbose_name="計算實際掛鉤工資",
              help_text="勾選表示此乘務記錄計入實際掛鉤工資計算"
          )
          ji_xiao_train = models.ForeignKey(
              JiaoLuBiao,
              on_delete=models.CASCADE,
              verbose_name="績效核算車次",
              blank=True,
              null=True,
              related_name="ji_xiao_train_model",
          )
          ji_xiao_xi_shu = models.DecimalField(
              max_digits=5, decimal_places=2, verbose_name="績效系數", default=1.0
          )
          custom_jiao_lu_type = models.ForeignKey(
              JiaoLuType,
              on_delete=models.CASCADE,
              verbose_name="自定義交路類型",
              blank=True,
              null=True,  # 允許為空,保存時會自動設置
              help_text="默認使用乘務車次的交路類型",
          )
          custom_xi_shu = models.BooleanField(default=False, verbose_name="是否手動修改系數")
      
          def save(self, *args, **kwargs):
              if not self.custom_xi_shu:
                  self.ji_xiao_xi_shu = self.jiaolu_zhiwu.ji_xiao_xi_shu
      
                  # 設置默認的交路類型(如果未設置且train_jiaolu存在)
                  if not self.custom_jiao_lu_type and self.train_jiaolu_id:
                      # 獲取train_jiaolu的第一個關聯交路類型
                      first_type = self.train_jiaolu.jiao_lu_type.first()
                      if first_type:
                          self.custom_jiao_lu_type = first_type
              super().save(*args, **kwargs)
      
          # 在保存之前可以進行數據驗證或格式化
          # if not isinstance(self.train_jiaolu, dict):
          #     raise ValueError("train_jiaolu必須是字典列表")
          # super().save(*args, **kwargs)
      
          def __str__(self):
              return (
                  self.employee_jiaolu_team.name
                  + ":"
                  + self.date_start.strftime("%Y-%m-%d")
                  + " 至 "
                  + self.date_end.strftime("%Y-%m-%d")
                  + " "
                  + self.train_jiaolu.train
                  + "次"
              )
      
      
          class Meta:
              unique_together = (
                  ("employee_jiaolu_team", "date_start", "date_end", "train_jiaolu"),
              )
      
              verbose_name = "職工乘務交路考勤表"
              verbose_name_plural = verbose_name
      
      
      train_jiaolu = models.ForeignKey(
          JiaoLuBiao, on_delete=models.CASCADE, verbose_name="乘務車次"
      )
      ji_xiao_train = models.ForeignKey(
          JiaoLuBiao,
          on_delete=models.CASCADE,
          verbose_name="績效核算車次",
          blank=True,
          null=True,
          related_name="ji_xiao_train_model",  # 這個你顯式設置了
      )

      這里的關鍵點在于:

      1. Django 的默認行為:通常,如果只有一個外鍵指向某個模型且未設置 related_name,Django 會使用 小寫模型名_set 作為默認的反向查詢名(例如 jiaolubiao_set)。

      2. 多外鍵時的自動處理:當同一個模型(這里是 ChengWuKaoQinBiao)有多個外鍵指向另一個模型(JiaoLuBiao)時,Django 要求這些反向關系名稱必須是唯一的。如果你沒有為所有外鍵顯式設置 related_name,Django 就無法使用統一的 小寫模型名_set,因為它無法區分你具體想查詢哪個外鍵關系。因此,Django 會自動為你生成一個唯一的反向名稱。你代碼中使用的 chengwukaoqinbiao 正是Django為 train_jiaolu 這個外鍵字段自動生成的默認反向名稱。

      ?? 最佳實踐與建議

      雖然當前代碼可以運行,但為了代碼的清晰性和可維護性,我強烈建議你:

      • 顯式設置 related_name:為所有外鍵關系手動指定一個清晰、明確的反向名稱,避免依賴Django的自動生成規則。這能讓你的代碼意圖更明確,也便于后續維護。

        例如,你可以將 train_jiaolu 字段修改為:

      • train_jiaolu = models.ForeignKey(
            JiaoLuBiao, 
            on_delete=models.CASCADE, 
            verbose_name="乘務車次",
            related_name="chengwu_kaoqin_records"  # 添加一個清晰的名稱
        )
        之后你的查詢就可以使用 chengwu_kaoqin_records 了。
      •  檢查實際生成的反向名稱:你可以通過查看項目的遷移文件,或者使用Django shell進行檢查,來確認Django最終為你的模型生成了哪些具體的反向關系名稱。

       

      總而言之,你觀察到的現象是Django在處理模型多外鍵關系時的一種長期存在的機制,并非5.2版本的新改動。養成顯式定義 related_name 的習慣,會讓你的項目結構更清晰。

      如果你能分享這兩個模型(JiaoLuBiao 和 ChengWuKaoQinBiao)完整的定義,或許我能提供更精確的反向關系名稱解析。

       

      posted @ 2025-11-02 09:28  笑而不語心自閑  閱讀(4)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 2021国产精品视频网站| 国产乱人伦无无码视频试看| 日韩少妇人妻vs中文字幕 | 国产mv在线天堂mv免费观看| 97精品伊人久久大香线蕉APP| 中国china体内裑精亚洲日本| 亚洲黄色片一区二区三区| 成人亚洲av免费在线| 亚洲一区精品视频在线| 性欧美乱熟妇xxxx白浆| 精品视频一区二区福利午夜| 国产亚洲精品在av| 青草热在线观看精品视频| 国产羞羞的视频一区二区| 免费国产女王调教在线视频| 884aa四虎影成人精品| 亚洲黄色第一页在线观看| 欧美黑人粗暴多交高潮水最多| 国产福利深夜在线播放| 亚洲国产一区二区三区久| av综合网男人的天堂| 成人一区二区三区激情视频 | 亚洲av成人午夜福利| 亚洲v欧美v日韩v国产v| 我国产码在线观看av哈哈哈网站 | 中国女人熟毛茸茸A毛片| 亚洲免费视频一区二区三区 | 日韩中文字幕有码av| 欧美亚洲综合久久偷偷人人 | 国产一区日韩二区三区| 人妻日韩精品中文字幕| 亚洲中文字幕无码av永久| 日韩放荡少妇无码视频| 亚洲va中文字幕无码久久不卡 | 麻豆a级片| 国产精品无码无在线观看| 成人无码午夜在线观看| 毛片无码免费无码播放| 国产精品成人综合色在线| 武乡县| 精品一日韩美女性夜视频|