2015-11-25 74 views
0

我对Django相对较新,我一直在试图找到一种方法来实现一个ManyToMany字段,其中的可见'选择'更改基于布尔字段相同的模型。ManyToMany模型字段的选择更改基于布尔值

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

我试图找到一种方法,而不是创建一个新表,使它在manytomany关系中列出的作业依赖于'is_manager'的布尔值。也就是说,如果你点击'is_manager',这应该列出特定于经理的工作,但这些经理特定的工作与非经理工作在同一个表格中 - 那些只是空白。

我一直在寻找通过领域等,但我提出的所有解决方案似乎依赖制作另一个表。我相信有一种方法可以做得更好。

谢谢。

+0

我是一个很大的困惑。你描述的内容似乎与模型没有关系,但主要是关于前端。你如何创建表单? –

+0

“制作一张桌子”是什么意思?你是否出于某种原因手动管理数据库?此外,我的直觉是,解决您的问题可能在于为您的许多领域创建自定义“RelatedManager”。请参见https://docs.djangoproject.com/en/dev/topics/db/managers/#manager-types,但是,@ xbirkettx也提供了一个有效的观点......您在“UI中”是什么意思?如果您指的是Django管理员,那么我的解决方案可能会有所帮助,但如果您的意思是在网页的前端,则可以使用许多工具将其限制在前端而不是数据库中。 –

回答

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)