我尝试用django的RequestFactory
的post方法测试一个view-function,这个view-function应该创建一个新的ObjA
示例,ObjA
有一个ObjB
的外键字段。
我的测试现在看起来像这样(为了更好地阅读,更改了名称):
request = self.factory.post('/create-objA/', data={'objB': objB.id, 'field1': 'dummy'})
request.user = self.user
request.POST.is_bound = True
create_objA(request)
self.assertTrue(ObjA.objects.filter(field1='dummy').exists())
objB
确实存在,这是在同一测试函数中之前几行测试的。
然而,代码片段中的测试失败了,原因是在下面的创建函数中,form.is_valid()
从来不是true
:
def create_objA(request):
if request.method == 'POST':
form = ObjAFormCreate(request.POST)
if form.is_valid():
....
因此,未创建ObjA
。表单无效,因为它在ObjB
引用字段中有错误:
Select a valid choice. That choice is not one of the available choices.
尽管objB.id
在form.data
内部。
- 问题:**如何编写测试,使
form
不会出现错误?
- 问题:**如何编写测试,使
型号:
class ObjA(models.Model):
id = models.BigAutoField(primary_key=True)
obj_b_id = models.ForeignKey(ObjB, on_delete=models.CASCADE)
field1 = models.CharField(max_length=10)
表格:
class ObjAFormCreate(ModelForm):
objB = forms.ModelChoiceField(queryset=ObjB.objects.all())
field1 = forms.CharField(max_length=10)
1条答案
按热度按时间bis0qfac1#
回答我自己的问题。看起来代码是正确的,但在Django或我的IDE中有一个bug,因为经过一些修改和尝试后,它开始使用完全相同的代码。我不知道为什么在某些时候行为是不确定的。