gpt4 book ai didi

django - 如何在 Django 中测试表单?

转载 作者:行者123 更新时间:2023-11-28 21:10:13 25 4
gpt4 key购买 nike

我的模型是这样的:

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)

因此,当用户转到我的索引文件时,他会找到两种形式,一种是他的名字,另一种是汽车的名字,提交后将在数据库中创建。

所以现在我在 shell 中并想测试它,但我不确定正确的语法是什么,我试过这个:

response = client.post('/', {'car_name':'something','person_name':'something'})

但它总是返回:

IndexError: list index out of range

这是什么意思?或者运行测试的正确语法是什么?

我也试过这个:

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 必须来自您未显示的代码行。

请更新您的问题以提供额外的代码。

关于django - 如何在 Django 中测试表单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33663274/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com