Django形式:对ModelMultipleChoiceField进行子集化

时间:2017-07-20 21:05:06

标签: python django

我正在寻找一种方法来过滤django表单中的多项选择字段,以便只能看到用户数据库的特定部分。

我有三种模式:

  • 研究结果模型(名为Forskningsresultater);
  • 用户模型(默认User模型);和
  • 前两个模型(名为PersonRes)之间的定制M2M模型。这个定制的M2M模型已经使用Django Import / Export导入。

假设我有300个用户的模型,并且一个特定的研究结果有5个作者。在表单中,我只想显示这5个作者的复选框,而不是全部300个。复选框用于更改participant模型中的PersonRes字段(请参阅下面的models.py框)。因此,我想:

  1. 子集,因此只显示通过M2M模型与特定研究结果相关的作者。
  2. 即使用户取消选择作者作为参与者(因此我们有四个已检查的作者和一个未经检查的作者),它应该能够返回到此表单并仍然可以看到所有作者(此处:所有五位作者)并制作如果需要,可以对所有这些作者进行其他更改。
  3. models.py

    class Forskningsresultater(models.Model):
        id = models.IntegerField(primary_key=True)
        ...
        authors = models.ManyToManyField(settings.AUTH_USER_MODEL, through='PersonRes', blank=True,related_name='authors',verbose_name="Authors")
    
    class PersonRes(models.Model):
        id = models.IntegerField(primary_key=True)
        user = models.ForeignKey(settings.AUTH_USER_MODEL,on_delete=models.CASCADE,null=True,verbose_name="user")
        forskningsresultater = models.ForeignKey(Forskningsresultater,on_delete=models.CASCADE, null=True,verbose_name="forskningsresultater")
        participant = models.BooleanField(default=True)
    

    forms.py

    class ForskningsresultaterApproveForm(forms.ModelForm):
        authors = forms.ModelMultipleChoiceField(required=False,queryset=User.objects,label="Participants",widget=forms.CheckboxSelectMultiple)
        class Meta():
            model = Forskningsresultater
            fields = ('authors')
            widgets = {
            }
    

    我怀疑我应该在.objects.filter(...)格式中使用queryset,但我还没有找到有效的方法。

0 个答案:

没有答案