亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Django 過濾外鍵項

Django 過濾外鍵項

料青山看我應如是 2023-10-31 15:58:09
我制作簡單的日常清潔檢查應用程序。該應用程序很簡單,用戶觀察某些區域并檢查這些區域是否干凈。經過所有檢查后,用戶需要向批準其日常清潔工作的當局報告。這里的權威機構是創建者、檢查者和簽名者。這里的 cln_daily 模型代表日常清潔工作,將有來自用戶模型的制造者、檢查者和簽名者。我有一個名為user的應用程序,它在model.py中對用戶模型進行了定制class User(AbstractUser):    username = models.CharField(max_length=50, unique=True)    email = models.EmailField(_('email address'), unique=True)    phone = models.IntegerField(_('phone number'), unique=True, blank=True, null=True)該用戶與組查詢集具有多對多關系:創建者、檢查者、簽名者>>> print(Group.objects.all()) <QuerySet [<Group: maker>, <Group: checker>, <Group: signer>]>在另一個名為clean的應用程序中,我有cln_daily模型,該模型與基于其組的用戶模型具有外鍵關系。class cln_daily(models.Model):   .   .   user_maker = models.ForeignKey(User,verbose_name="Maker's Signature",on_delete=models.CASCADE, related_name="makerSignature", blank=True, null=True,)   user_checker = models.ForeignKey(User, verbose_name="Checker's Signature",on_delete=models.CASCADE, related_name="checkerSignature", blank=True, null=True)   user_signer = models.ForeignKey(User, verbose_name="Signer's Signature",on_delete=models.CASCADE, related_name="signerSignature", blank=True, null=True)所以我的意思是user_maker查詢集具有僅屬于組maker 的用戶。user_checker具有僅屬于組checker 的用戶,而user_signer查詢集具有僅屬于組signer 的用戶。如何在該model.py中表達過濾后的用戶模型?
查看完整描述

3 回答

?
繁星淼淼

TA貢獻1775條經驗 獲得超11個贊

經過長時間的尋找。我通過用表格解決它來欺騙它


class MCSForm(forms.ModelForm):

    class Meta:

        model = cln_daily

        fields = ("__all__")

    def __init__(self, *args, **kwargs):

        super().__init__(*args, **kwargs)

        self.fields['user_maker'].queryset = User.objects.filter(groups__name='maker')

        self.fields['user_checker'].queryset = User.objects.filter(groups__name='checker')

        self.fields['user_signer'].queryset = User.objects.filter(groups__name='signer')


查看完整回答
反對 回復 2023-10-31
?
茅侃侃

TA貢獻1842條經驗 獲得超21個贊

我想我了解了您的問題,您想以簡單的方式連接表格,對吧?,我建議看看這個和這個


并以這種方式修復這些模型關系,因為到時候這將是一個問題:


class cln_daily(models.Model):

   .

   .

   user_maker = models.ForeignKey(User,verbose_name="Maker's Signature",on_delete=models.CASCADE, related_name="makerSignature", blank=True, null=True,)

                                  ^^^^

   user_checker = models.ForeignKey(User, verbose_name="Checker's Signature",on_delete=models.CASCADE, related_name="checkerSignature", blank=True, null=True)

                                   ^^^^^

   user_signer = models.ForeignKey(User, verbose_name="Signer's Signature",on_delete=models.CASCADE, related_name="signerSignature", blank=True, null=True)

                                   ^^^^

最好不要使用in User,或者使用此模式作為 str (因為你必須先將它導入到你的代碼中):ForeignKeyFieldget_user_model()


class cln_daily(models.Model):

   .

   .

   user_maker = models.ForeignKey('myapp.User',verbose_name="Maker's Signature",on_delete=models.CASCADE, related_name="makerSignature", blank=True, null=True,)

   user_checker = models.ForeignKey('myapp.User', verbose_name="Checker's Signature",on_delete=models.CASCADE, related_name="checkerSignature", blank=True, null=True)

   user_signer = models.ForeignKey('myapp.User', verbose_name="Signer's Signature",on_delete=models.CASCADE, related_name="signerSignature", blank=True, null=True)

因為如果你是 django 的新手,遲早會出現遷移問題


查看完整回答
反對 回復 2023-10-31
?
尚方寶劍之說

TA貢獻1788條經驗 獲得超4個贊

我有更好的答案,而不是用形式來欺騙他們。在 FKField 中使用limit_choices_to


User = get_user_model()

class cln_daily(models.Model):

   .

   .

   user_maker = models.ForeignKey(User,verbose_name="Maker's Signature",on_delete=models.CASCADE, related_name="makerSignature", blank=True, null=True,limit_choices_to={'groups__name':'maker'})

   user_checker = models.ForeignKey(User, verbose_name="Checker's Signature",on_delete=models.CASCADE, related_name="checkerSignature", blank=True, null=True,limit_choices_to={'groups__name':'checker'})

   user_signer = models.ForeignKey(User, verbose_name="Signer's Signature",on_delete=models.CASCADE, related_name="signerSignature", blank=True, null=True,limit_choices_to={'groups__name':'signer'})




查看完整回答
反對 回復 2023-10-31
  • 3 回答
  • 0 關注
  • 192 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號