将文件字段保存为“无”,但反映数据库中的空字符串

时间:2019-01-26 08:52:40

标签: django

我正在尝试提交带有文件字段的表单。在某些情况下,该文件尚不可用,因此用户必须先提交没有该文件的表格。

我的字段现在看起来像这样

file_attachment_pdf = models.FileField(blank= True,null = True, unique=True)

我可以保存1条记录并保留空白字段。当添加带有空白文件上传的第二条记录时,由于存在具有文件值的现有记录,因此不再起作用。

检查后,它是一个空字符串。

所以我试图覆盖models.py中的clean函数

def clean(self):

        if not self.file_attachment_doc:
            print('doc is blank, will tag as Null')
            self.file_attachment_doc = None

但是由于某些原因,当我检入数据库时​​,它仍然存储为空字符串。 (我正在使用用于SQLite的数据库浏览器,它说数据字段是具有0个字符的文本)

当我尝试提交时,这是返回给我的错误

具有此文件附件pdf的文件已存在。

如果以前已经有人问过这个问题,请告诉我。

1 个答案:

答案 0 :(得分:1)

FileField将文件路径存储为CharField。对于CharFieldnull=True设置等于存储空字符串。这就是为什么您在数据库中看到空字符串的原因。您的错误来自unique=True参数。这意味着您只能为模型存储一个空文件。 另外,仅当使用用户模型表单来保存实例时,才会调用模型clean方法。总而言之,如果该方法是否被调用,则没有什么区别,存储的值将始终为空字符串 https://docs.djangoproject.com/en/2.1/ref/models/fields/#null