Как не отображать поле изображения django в настоящее время и ясный материал?
Я посмотрел на следующий вопрос, но не повезло. Я не знаю, может быть, я не понял ответов.
1) Как удалить тег "Текущий" и ссылку виджета FileInput в Django?
2) Django ModelForm ImageField
Моя форма:
class SettingsForm(forms.ModelForm):
company_logo = forms.ImageField(label=_('Company Logo'),required=False, error_messages = {'invalid':_("Image files only")})
class Meta:
model = Settings
fields = ("company_logo")
....
Моя модель:
class Settings(models.Model):
strg=CustomFileSystemStorage(strict_name='images/company_logo.png',save_format='PNG')
company_logo=models.ImageField(upload_to='images',blank=True,null=True,storage=strg)
.....
После рендеринга:
![imagefield]()
Я вижу по первой ссылке, что models.ImageField
наследует FileInput
и добавляет лишние вещи, но я не понимаю, как это преодолеть?
Спасибо заранее.
Ответы
Ответ 1
Решение:
class SettingsForm(forms.ModelForm):
company_logo = forms.ImageField(label=_('Company Logo'),required=False, error_messages = {'invalid':_("Image files only")}, widget=forms.FileInput)
class Meta:
model = Settings
fields = ("company_logo")
....
Я добавил виджет forms.FileInput
, чтобы указать ImageField использовать основное поле, а не тот, который унаследован от FileInput
.
Ответ 2
@mtndesign, вам также может понадобиться опция "удалить", которую вы можете разместить везде, где захотите, в своем шаблоне.
class MyForm(forms.ModelForm):
photo = forms.ImageField(required=False, widget=forms.FileInput)
remove_photo = forms.BooleanField(required=False)
...
def save(self, commit=True):
instance = super(MyForm, self).save(commit=False)
if self.cleaned_data.get('remove_photo'):
try:
os.unlink(instance.photo.path)
except OSError:
pass
instance.photo = None
if commit:
instance.save()
return instance
Ответ 3
Вы можете изменить виджет, используемый для визуализации поля формы, указав его при инициализации:
class SettingsForm(forms.ModelForm):
company_logo = forms.ImageField(label=_('Company Logo'),required=False, \
error_messages ={'invalid':_("Image files only")},\
widget=FileInput)
Смотрите документы для виджетов.