我对Django还比较陌生,我一直在尝试找到一种方法来实现ManyToMany字段,该字段在UI中的可见"选项"会根据同一模型中的BooleanField进行更改。
例如,假设我有一个代表不同工作的模型,以及一个与这个工作模型有很多关系的工人模型。还假设有两种类型的工人:经理和非经理,后者表示为BooleanField。如果你是一名经理,你就有一些员工没有的工作,反之亦然。
我正试图找到一种方法,在不创建新表的情况下,使其成为many-many关系中列出的作业依赖于"is_manager"的布尔值。也就是说,如果单击"is_manager",它应该列出特定于经理的工作,但这些特定于经理工作与非经理工作位于同一个表中——这些工作将为空。
我一直在研究贯穿领域等,但我提出的所有解决方案似乎都取决于制作另一张表。不过,我相信有办法做得更好。
谢谢。
我建议这种方法:
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)