Django Test RequestFactory包含外键的帖子

xzabzqsa  于 2023-01-27  发布在  Go
关注(0)|答案(1)|浏览(118)

我尝试用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.idform.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)
bis0qfac

bis0qfac1#

回答我自己的问题。看起来代码是正确的,但在Django或我的IDE中有一个bug,因为经过一些修改和尝试后,它开始使用完全相同的代码。我不知道为什么在某些时候行为是不确定的。

相关问题