我正在尝试在验证后在FormModel中设置数据。这里的用例示例是,如果我想为表单数据集分配唯一的编号,当且仅当它通过验证时。我还试图解决其他一些在验证之前无法获得的信息。我已尝试在视图类和ModelForm的clean()方法中进行设置,但似乎无法正确设置。每次我得到一个异常,说“tag_id”不能为空。显然,我不是以让form.save()访问数据的方式设置它。
请注意,在下面的示例中,我尝试在两个位置设置tag_id来说明我尝试过的内容;显然,如果有效,只需要一个地方。
这样做的正确方法是什么?
模型和FormModel:
class Video(models.Model):
tag_id = models.BigIntegerField()
name = models.CharField(max_length=200)
uploaded = models.DateTimeField()
size = models.BigIntegerField()
video_file = models.FileField(upload_to='documents/%Y/%m/%d')
class Meta:
db_table = 'videos'
class VideoForm(forms.ModelForm):
class Meta:
model = Video
fields = ['name', 'video_file']
def clean(self):
self.data['tag_id'] = 10
return self.cleaned_data
视图类:
class Upload(FormView):
template_name = "account/templates/upload.html"
form_class = VideoForm
success_url = reverse_lazy('account:home')
def form_valid(self, form):
form.cleaned_data['tag_id'] = 10
form.save()
return super().form_valid(form)
form.save()上的异常:
IntegrityError at /account/upload/
(1048, "Column 'tag_id' cannot be null")
答案 0 :(得分:0)
您应该设置模型实例的属性:
form.instance.tag_id = 10
form.save()