如何解决具有从请求对象分配的字段的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 举报,一经查实,本站将立刻删除。