验证后设置模型数据

时间:2015-05-16 14:03:25

标签: python django forms

我正在尝试在验证后在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")

1 个答案:

答案 0 :(得分:0)

您应该设置模型实例的属性:

form.instance.tag_id = 10
form.save()