Подтвердить что ты не робот

Как не отображать поле изображения 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 и добавляет лишние вещи, но я не понимаю, как это преодолеть?

Спасибо заранее.

4b9b3361

Ответ 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)

Смотрите документы для виджетов.