Django FileField 的理解以及默认值
Jan. 24, 2021, 8:35 p.m.
最近在编辑网页的时候,遇到的一些问题和解决办法写在下面
1.解决 Django FileField 的默认值问题
在使用 Django FileField的时候,修改和新建,往往会提示输入默认值
You are trying to add a non-nullable field 'temp' to photo without a default; we can't do that (the database needs something to populate existing rows).
Please select a fix:
1) Provide a one-off default now (will be set on all existing rows with a null value for this column)
2) Quit, and let me add a default in models.py
Select an option:
这个时候在 FileField 内的null设置为True即可
temp = models.FileField(verbose_name='temp', upload_to='temp/%Y/%m/%d/',null=True)
2. 解决添加含 FileField 的Django Model
当其他代码中,向数据库添加含 FileField 的Django Model,对 FileField 的设置时,和正常的设定并不相同
例如,参考类 Photo
class Photo(models.Model):
description = models.CharField(verbose_name='description',max_length=1024, blank=True)
当创建一个这个类的时候,可以使用
item = Photo(description=self.description)
item.save()
如果添加了参数,让Photo变成
class Photo(models.Model):
description = models.CharField(verbose_name='description',max_length=1024, blank=True)
photo = models.FileField(verbose_name='photo',upload_to='photos/%Y/%m/%d/',storage=ImageStorage())
那么创建这个文件,可以使用
from django.core.files import File
djangofile = File(file_path)
item = Photo(description=self.description)
item.photo.save('new.jpg', djangofile)
item.save()
这样来存储文件,同时上传文件,new.jpg 为上传文件的文件名,会忽原始文件的文件名