【问题标题】:Django: File is only saved when created in admin pageDjango:文件仅在管理页面中创建时保存
【发布时间】:2018-03-12 11:06:31
【问题描述】:

我有一个很奇怪的问题: 当我在管理页面中为我的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)

【问题讨论】:

    标签: python django


    【解决方案1】:

    我怀疑您的问题出在 HTML 中。

    你把表单中的enctype设置成这样了吗?

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

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

    【讨论】:

    • 如果我不使用文件并将 enctype="multipart/form-data" 放入表单中,那会做错什么还是可以正常工作?
    猜你喜欢
    • 2013-02-16
    • 2011-06-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-18
    • 2019-06-03
    • 1970-01-01
    • 2010-10-19
    • 2013-06-21
    相关资源
    最近更新 更多