Как мне установить начальное значение для FileField, которое будет отображаться в виджете ClearableFileInput при создании нового объекта (несвязанная форма)?
Я пробовал следующее, но widget.value
не возвращает FeildFile
экземпляр, если это первый раз, когда пользователь создает объект:
models.py
class MyModel(models.Model):
myfile=models.FileField()
forms.py
class MyForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(MyForm, self).__init__(*args, **kwargs)
self.fields['myfile'].initial= 'myfile.pdf'
class Meta:
model = Issuer
fields = ['myfile']
Это приводит к:
Точно так же установка значения по умолчанию в поле модели не работает:
class MyModel(models.Model):
myfile=models.FileField(default='myfile.pdf')
Исходное значение виджета все еще None
, но если оставить его пустым и сохранить, будет создан файловый объект myfile.pdf
. settings.MEDIA_URL
и urls.py
определенно верны, и файл находится в системе, потому что он загружается после сохранения формы.
Чего мне не хватает, так это показа его в качестве начального значения перед сохранением формы и созданием объекта.
Этот ответ предполагает, что вы не можете предоставить начальные данные, но вы можете указать начальное значение с атрибутом url
, чтобы имитировать внешний вид файла. Однако неясно, как вы это сделаете.
Попытка создать начальный файловый объект в форме также возвращает widget.value = None
class MyForm(forms.ModelForm):
f_path = os.path.join(settings.BASE_DIR + settings.MEDIA_URL, 'myfile.pdf')
f = open(f_path)
myfile = File(f)
def __init__(self, *args, **kwargs):
super(MyForm, self).__init__(*args, **kwargs)
self.fields['privacy_policy'].initial = self.myfile