如何为models.FileField()
设置默认文件?
class MyModel(models.Model):
myfile = models.FileField(upload_to='mydocs', default=???)
答案似乎是:
myfile=models.FileField(upload_to='mydocs', default='mydocs/myfile.pdf')
但是,这在创建新对象时不会导致期望的行为。
对于CharField
等其他字段,default=
值将在新窗体上显示为小部件值。但是对于FileField却不是,它仍然导致“未选择文件”:
那么如何设置默认值?我们应该尝试创建一个新的FieldFile实例吗?我们需要创建一个文件对象吗?
可能是您没有在Django设置中定义默认的MEDIA_ROOT。尝试像这样定义它:
def get_default(self):
if self.myfile:
return self.myfile
else:
return settings.MEDIA_ROOT + '/mydocs/myfile.pdf'
myfile=models.FileField(upload_to='mydocs', default=get_default)
在您的settings.py中,添加:
MEDIA_URL = "/media/"
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
在您的urls.py中,添加到末尾:
urlpatterns += static(settings.MEDIA_URL,
document_root=settings.MEDIA_ROOT)