ManyToMany模型字段,其中选项根据布尔值更改

时间:2015-11-25 22:43:45

标签: django many-to-many multiple-select manytomanyfield

我对Django来说相对较新,而且我一直试图找到一种方法来实现一个可见的选择'选择的ManyToMany字段。根据在同一模型中找到的BooleanField,在UI中进行更改。

例如,假设我有一个代表不同工作的模型,以及一个与该工作模型有很多关系的工人模型。还假设有两种类型的工作者:管理器和非管理器,表示为BooleanField。如果你是一名经理,你有一些工人没有的工作,反之亦然。

我试图在没有创建新表的情况下找到一种方法,使得在manytomany关系中列出的作业依赖于' is_manager'的布尔值。也就是说,如果您要点击“is_manager”,则应该列出特定于经理的作业,但这些经理特定的作业与非经理人作业位于同一个表中 - 这些作业只是空白。

我一直在研究穿越领域等,但我提出的所有解决方案似乎都依赖于制作另一张桌子。我确信有一种方法可以做得更好。

谢谢。

1 个答案:

答案 0 :(得分:0)

我建议采用这种方法:

class MyModelForm(forms.ModelForm):
    class Meta:
        model = MyModel
        fields = ['jobs', 'username']

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        instance = kwargs.get('instance', None)
        if instance is not None:
            if instance.is_manager:
                self.fields['jobs'].queryset = Jobs.objects.filter(manager=True)
            else:
                self.fields['jobs'].queryset = Jobs.objects.filter(manager=False)