2009-12-30 100 views
1

我創建了基於模型的表單。該模型有許多領域。我這樣定義的字段:django many2many字段使不要求

contacts = models.ManyToManyField(Contact, blank=True, null=True) 

現在我真的不知道爲什麼生成的表單說,這個字段不能爲空。當我沒有爲聯繫人字段選擇聯繫人時,我總是收到錯誤消息「此字段是必需的」。

Whats`s wrong?

回答

3

在您的形式聲明標誌這一領域作爲required=False

class MyForm(forms.ModelForm): 
    contacts=forms.ModelMultipleChoiceField(queryset=Contact.objects.all(),required=False) 
    class Meta: 
    model=MyModel 
+0

是的,這是有效的。謝謝! – 2009-12-31 10:01:32

+0

你知道嗎?如果我想過濾與限制有關的聯繫人,它只應顯示與當前的表單實例相關的聯繫人,我的意思是它應該顯示與聯繫人相關的聯繫人不是全部。對於新的表單應該是空的,queryset = Contact.objects.filter(Contact.objects.filter(self.instance。????) – shahjapan 2010-07-16 06:41:49

1

在添加blank=True, null=True之前,可能你做了syncdb

syncdb只會在數據庫中不存在的情況下創建表。模型的更改必須在數據庫中直接使用SQL或使用遷移工具(如South)手動完成。

當然,如果您仍處於早期開發階段,將會更容易丟棄數據庫並再次運行syncdb

+0

不,我沒有運行執行syncdb。我也曾運行過django evolution http://code.google.com/p/django-evolution/。 我還以爲這是問題。也許一滴水是一個好主意。 – 2009-12-30 23:27:49

0

您對null = True的使用在這裏引起混淆。 manyToMany字段導致第三個表格將一個模型與另一個模型相關聯。例如如果business.contacts爲空,則表中沒有記錄。 null=True會讓我認爲你打算將NULL記錄添加到此表中,這似乎不是有效的。

通常,您將離開這兩個這些屬性關閉。

+0

好吧,但如果我離開這兩個屬性,他們是必需的。實際上,如果用戶至少需要添加一個m2m的關係,那麼這不是一個大問題,但如何實現這一點仍然很有趣。 – 2009-12-30 23:37:48