[英]how to test forms in django?
我的模型如下所示:
class Car(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4)
name = models.CharField(max_length=200)
class Owner(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4)
first_name = models.CharField(max_length=100)
last_name = models.CharField(max_length=100)
car = models.ForeignKey(Car)
和看起来像这样的形式
class CarForm (forms.ModelForm):
def __init__(self, *args, **kwargs):
super(CarForm, self).__init__(*args, **kwargs)
self.fields['car_name']=forms.CharField(widget=forms.TextInput(attrs={'autocomplete':'off'}),label='', required=False)
self.fields['person_name']=forms.CharField(widget=forms.TextInput(attrs={'autocomplete':'off'}),label='', required=False)
因此,当用户转到我的索引文件时,他会找到两种形式,一种是他的名字,另一种是汽车的名字,提交后将在数据库中创建。
所以现在我在外壳程序中,想要测试一下,但是我不确定什么是正确的sytnax,我尝试了一下:
response = client.post('/', {'car_name':'something','person_name':'something'})
但我总是得到一个
IndexError:列表索引超出范围
这意味着什么? 还是运行测试的正确语法是什么?
我也试过
response = client.post('/', {'id_car_name':'something','id_first_name':'something'})
由于这些是django在首页中创建的ID,但无效
您的测试用例语法看起来正确。 第一个示例中的字段名称正确,并且与self.fields
声明的字段名称匹配。 这是一个更详细的示例(具有所需的断言):
from django.test import Client, TestCase
class CarFormTest(TestCase):
def test_form(self):
client = Client()
response = client.post('/', {'car_name':'something','person_name':'something'})
self.assertEqual(response.status_code, 200)
我在您的测试行中没有看到任何会导致IndexError的内容。
鉴于您没有像这样将Car模型映射到CarForm:
class CarForm(forms.modelForm):
class Meta:
model = Car
似乎您不希望直接映射,而在保存表单时需要在CarForm上使用自定义save()
方法来创建Car
和Owner
对象。 IndexError必须来自您未显示的代码行。
请更新您的问题以提供其他代码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.