我如何为`models.FileField()`设置默认文件?

问题描述 投票:0回答:1

如何为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却不是,它仍然导致“未选择文件”:

enter image description here

那么如何设置默认值?我们应该尝试创建一个新的FieldFile实例吗?我们需要创建一个文件对象吗?

django django-models
1个回答
0
投票

可能是您没有在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)
© www.soinside.com 2019 - 2024. All rights reserved.