Django:文件仅在管理页面中创建时保存

时间:2018-03-12 11:06:31

标签: python django

我有一个非常奇怪的问题: 当我在管理页面中为我的Custom模型创建一个对象时,一切正常。但是,当我在网站的自定义表单中填写相同的输入时,它不起作用。

问题是file字段:当我在网站的表单中输入有效文件时,它不会保存,因此我收到验证错误(请参阅下面的clean()函数)。因为即使我上传文件也没有self.file。在管理页面中,它可以正常工作。

错误在哪里?

背景:

这是我的Custom模型:

# In my models.py
class Custom(models.Model):
    file = models.FileField(max_length=45, upload_to=get_filepath, blank=True)
    file_info = models.CharField(max_length=50, blank=True)
    ...

    def clean(self):
        if self.file_info and not self.file:
            raise ValidationError("...")

这是我的自定义CreateView:

class CustomCreate(CreateView):
    model = Custom
    form_class = CustomForm

    def form_valid(self, form):
        self.object = form.save(commit=False)
        self.object.user = self.request.user
        self.object.save()
        return super().form_valid(form)

1 个答案:

答案 0 :(得分:0)

我怀疑你的问题出现在HTML中。

您是否在表单中设置了enctype

<form action="." method="post" enctype="multipart/form-data">

</form>

如果您不这样做,该文件将无法使用。使用具有文件上载控件的表单时,此值是必需的。