2015-11-25 103 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)