繁体   English   中英

如何在Django中测试表格?

[英]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()方法来创建CarOwner对象。 IndexError必须来自您未显示的代码行。

请更新您的问题以提供其他代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM