Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django筛选外键项_Python_Django_Foreign Keys - Fatal编程技术网

Python Django筛选外键项

Python Django筛选外键项,python,django,foreign-keys,Python,Django,Foreign Keys,我做了一个简单的日常清洁检查应用程序。该应用程序很简单,用户可以观察某些区域并检查这些区域是否干净。在所有检查之后,用户需要向批准其日常清洁工作的当局报告。这里的权威是制造者、检查者和签署者。cln_daily model在这里表示日常清洁工作,将有来自用户模型的制造者、检查者和签署者 我有一个名为user的应用程序,它在model.py中对user模型进行了成本化 class User(AbstractUser): username = models.CharField(max_len

我做了一个简单的日常清洁检查应用程序。该应用程序很简单,用户可以观察某些区域并检查这些区域是否干净。在所有检查之后,用户需要向批准其日常清洁工作的当局报告。这里的权威是制造者、检查者和签署者。cln_daily model在这里表示日常清洁工作,将有来自用户模型的制造者、检查者和签署者

我有一个名为user的应用程序,它在model.py中对user模型进行了成本化

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>]>
所以我的意思是user\u makerqueryset中的用户只属于makeruser\u checker具有仅属于组的用户checkeruser\u signerqueryset具有仅属于组的用户signer
如何在model.py中表达过滤后的用户模型?

我想我对你的问题有所了解,你想用一种简单的方式连接表,对吗,我建议你看一看

并以这种方式修复这些模型关系,因为到时候它将成为一个问题:

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)
                                   ^^^^
与其在
ForeignKeyField
中使用
User
,不如使用
get\u User\u model()
或将此模式用作str(因为您必须先在代码中导入它):


因为如果您是django的新手,经过长时间的搜索,最终可能会遇到迁移问题。我以表格的形式解决了它

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')


我有更好的答案,而不是在形式上欺骗他们。在FKField中使用将选项限制为

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'})


我认为这些信息不足以回答/解决您的问题,请您提供更多信息?我的意思是,你们通常想做什么?我想根据用户组筛选用户,并在外键中使用它们。例如:我过滤maker组中的用户,并将其与用户\u maker关联。所以在user_maker中,我只有一个拥有group maker的用户@EbrahimKarimilook当我说我需要更多的信息时,我指的是整个项目,因为我读了你的问题,根本不知道你想要完成什么。E.x:这些制造商是什么?他们制造什么吗?(是的,他们制造汽车对象)我想要他们制造汽车的所有用户,但我不知道如何过滤它!那是一个question@EbrahimKarimi我做了一个简单的日常清洁检查应用程序。该应用程序很简单,用户可以观察某些区域并检查这些区域是否干净。在所有检查之后,用户需要向批准其日常清洁工作的当局报告。所以这里的权威是制造者、检查者和签署者。cln_daily model在此表示日常清洁工作,将有来自用户模型的制造者、检查者和签名者。编辑您的问题以获得澄清,并为您的答案提供答案bro。我在表格上解决了它。这很棘手,但已经解决了。
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')

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'})