2015-06-25 79 views
0

我寫了一個測試案例:如何測試django模型表單?

class MyTestCreateFilter(TestCase): 

    def test_createfilter(self): 
     test_filter = Filter(user_profile_id= 3, 
     keyword = 'ca', 
     industry = 'it', 
     zip_code = '50002', 
     distance = 30, 
     creation_date = datetime.date.today(), 
     last_run_date = datetime.date.today() 
     ) 


     test_filter_form = FilterForm(instance=test_filter) 

     self.assertEqual(test_filter_form.is_valid(), False)#without data 
     test_filter_form = FilterForm({'user_profile_id':3,'keyword': 'ca','industry':'it','zip_code':'50002','distance':30,'creation_date': datetime.date.today(), 
     'last_run_date': datetime.date.today() }, instance=test_filter) 
     print test_filter_form.is_valid() 

給人錯誤:

DoesNotExist: UserProfile matching query does not exist. 

這是我form.how編寫測試用例:

類FilterForm(forms.ModelForm ):

class Meta: 

    model=Filter 

    exclude=('user_profile','creation_date','last_run_date') 

    widgets = { 
     'zip_code': forms.TextInput(attrs={'placeholder': "e.g.      20708"}), 
    } 

def clean(self): 

    user_profile = self.instance.user_profile 

    keyword = self.cleaned_data.get("keyword") 
    if Filter.objects.filter(user_profile=user_profile, keyword=keyword).exclude(id=self.instance.id).count() > 0: 
     msg = u"A filter with that keyword already exists!" 
     self._errors["keyword"] = self.error_class([msg]) 

    return self.cleaned_data 

當我測試的形式給出這個錯誤:

user_profile = self.instance.user_profile 文件「/usr/local/lib/python2.7/dist-packages/django/db/models/fields/related.py 」行343,在得到

raise self.field.rel.to.DoesNotExist 

DoesNotExist

如何解決呢?

+0

這可能是[添加](http://stackoverflow.com/posts/31046998/edit)的模型,你的問題非常有用。以及完整的回溯。 – Evert

+0

你檢查了我的答案嗎?如果它不適合你,請告訴我。如果它解決了您的問題,請考慮[接受答案](http://meta.stackoverflow.com/a/5235)。 – falsetru

+0

no.it沒有爲我工作。同樣的錯誤 – susmitha

回答

0

簡單地創建模型對象不會在數據庫中創建記錄。

使用.objects.create創建記錄。

test_filter = Filter.objects.create(
    user_profile_id= 3, 
    keyword = 'ca', 
    industry = 'it', 
    zip_code = '50002', 
    distance = 30, 
    creation_date = datetime.date.today(), 
    last_run_date = datetime.date.today() 
) 

或使用save

test_filter = Filter(...) 
test_filter.save()