微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

具有从请求对象分配的字段的Django单元测试表单

如何解决具有从请求对象分配的字段的Django单元测试表单

我有这张表格

uint64_t

并且我正在尝试对此测试进行单元测试

class PostCreationForm(forms.ModelForm):
    def form_valid(self,form):
        form.instance.author = self.request.user
        return super().form_valid(form)

断言通过,但是class PostCreationByFormTestCase(TestCase): def __init__(self,*args,**kwargs): super(PostCreationByFormTestCase,self).__init__(*args,**kwargs) self.CustomUser = get_user_model() def setUp(self): self.credentials = { 'username': 'john_smith','password': 'St0ngPassw0rd' } self.user = self.CustomUser.objects.create( username=self.credentials['username'],email='john_smith@mail.com',password=self.credentials['password'],first_name='John',last_name='Smith' ) def test_simple_form(self): form_data = { 'author': self.user,'title': 'Simple Post','description': 'very good description',} form = PostCreationForm(form_data) self.assertTrue(form.is_valid) post = form.save() 产生 django.db.utils.IntegrityError:“ author_id”列中的空值违反了非空约束

我尝试将表格更改为

form.save()

,但仍然无法正常工作。如果我不想将字段作为对象的输入,我认为这是将字段分配给对象的推荐方法在这种情况下,我希望帖子的作者为当前用户。 我应该如何修复才能测试表格?

解决方法

在检查表单是否有效时,您需要调用方法 is_valid,它不是属性。将form.is_valid更改为form.is_valid()即可。

form_valid()但是在检查form.is_valid()时不会被调用,因此您可能想使用clean方法。一个未经测试的示例:

class PostCreationForm(forms.ModelForm):

    def clean_author(self):
        author = self.cleaned_data.get('author')
        if not author:
            author = self.request.user
        return author

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。