2016-05-23 51 views
0

我有以下測試......Django的測試形式是有效的,當它含有ModelChoiceField

def test_contact_form(self): 
    form_data = {'name': 'Reiss Johnson', 
       'email': '[email protected]', 
       '_type': 'General Enquiry', 
       'content': 'This is some content'} 
    form = ContactForm(data=form_data) 
    self.assertTrue(form.is_valid()) 

這原本是通過爲「_type」是一個CharField,但它現在是一個ModelChoiceField &也是如此有人知道爲什麼這是失敗的?我猜即時輸入'_type'字典不正確現在?

我怎麼能得到上述測試再次通過?

我的形式是這樣...

class ContactForm(forms.Form): 
     name = forms.CharField(max_length=50) 
     email = forms.EmailField() 
     content = forms.CharField() 
     _type = forms.ModelChoiceField(queryset=EnquiryType.objects.values_list('text', flat=True), empty_label=None) 
+0

什麼是'EnquiryType'值是多少? 'GeneralEnquiry'可能不是一個有效的選擇,這意味着它不匹配查詢集的任何值。 –

+0

目前我有2個EnquiryType對象,其中一個具有'General Inquiry'的'.text'屬性,另一個具有'Request A Call Back'.text'屬性。我是否需要傳遞屬性或其他內容? –

回答

0

我認爲問題是,你不明白這是什麼ModelChoiceField做。它會生成一個id(它是該模型的主鍵)的列表,該列表對應於模型中的每個對象,因此當您保存時,它將id保存爲外鍵。您無法使用text填充表格字段,該字段僅爲EnquiryType的一個字段。想想看,如果你沒有引用另一個表的主鍵但是.text,應該選擇哪個對象ModelChoiceField?如果您創建具有相同text的另一個對象,該怎麼辦?

簡單修復將改變您的測試數據與id對象General Enquiry.text

0

我有同樣的問題。 要擴大尚的答案:

是的,它看起來像使用您參考的模型的主鍵將工作。

這裏就是我所做的:

valid_pk = NameOfModel.objects.all()[0].pk 
# You may need to replace 0 with the right number. 
form_data = {'name': 'Reiss Johnson', 
      'email': '[email protected]', 
      '_type': str(valid_pk), 
      'content': 'This is some content'} 
相關問題