我正在尝试提交带有文件字段的表单。在某些情况下,该文件尚不可用,因此用户必须先提交没有该文件的表格。
我的字段现在看起来像这样
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的文件已存在。
如果以前已经有人问过这个问题,请告诉我。
答案 0 :(得分:1)
FileField
将文件路径存储为CharField
。对于CharField
,null=True
设置等于存储空字符串。这就是为什么您在数据库中看到空字符串的原因。您的错误来自unique=True
参数。这意味着您只能为模型存储一个空文件。
另外,仅当使用用户模型表单来保存实例时,才会调用模型clean
方法。总而言之,如果该方法是否被调用,则没有什么区别,存储的值将始终为空字符串
https://docs.djangoproject.com/en/2.1/ref/models/fields/#null