2017-01-19 13 views
2

Я использую django-stdimage в своем приложении Django, и это отлично работает, единственная проблема заключается в том, что я хочу удалить строку «В настоящее время», флажок «Очистить» и остальную часть оформления из шаблона HTML. Я не могу понять, как этого добиться.Можно ли удалить метку «В настоящее время» при использовании django-stdimage?

Вот StdImageField объявление в моем models.py:

photo = StdImageField(upload_to=join('img', 'agents'), 
         variations={'thumbnail': (100, 100, True)}, default=None, 
         null=True, blank=True,) 

Я прочитал несколько SO ответ на вопрос о модификации Imagefield виджета использовать класс ClearableFileInput но мне кажется, что атрибут widget не допускается в качестве StdImageField класса параметр.

Есть ли способ удалить все это украшения?

Спасибо.

+0

Удалить где? в формах? в админ? – Udi

+0

удалить/скрыть в HTML-шаблоне. Я предполагаю, что должен внести некоторые изменения в models.py или forms.py – juankysmith

+0

@juankysmith Возможно, я ошибаюсь, но похоже, что 'StdImageField' работает только на уровне моделей. Не можете ли вы использовать «ImageField» с пользовательским виджетами в ваших формах.py и 'StdImageField' в ваших models.py? – mateuszb

ответ

3

В StdImageFieldextends Джанго ImageField

Джанго ImageFielddefines'form_class': forms.ImageField

и forms.ImageField по умолчанию виджет Django является: ClearableFileInput

Так что, если вы хотите изменить этот виджет на model.fields уровне, вам необходимо расширить StdImageField и переопределить метод formfield для возврата form_lass с form.field, имеющий еще один виджет по умолчанию.

Простой пример решение должно выглядеть следующим образом:

class NotClearableImageField(forms.ImageField): 
    widget = forms.FileInput 


class MyStdImageField(StdImageField): 
    def formfield(self, **kwargs): 
     kwargs.update({'form_class': NotClearableImageField}) 
     return super(MyStdImageField, self).formfield(**defaults) 

# Now you can use MyStdImageField 
# in your model instead of StdImageField 
class MyModel(models.Model): 
    my_image = MyStdImageField(*args, **kwargs) 

, но это будет изменение затрагивает все ModelForm «S продлив Model (включая администратор Django).

Возможно, вы не хотите этого делать, вместо этого вы можете применить этот виджет только к одному form, где вам нужно это конкретное поведение. ModelForms уже поддерживают это:

class MyModelForm(forms.ModelForm): 
    class Meta: 
     model = MyModel 
     fields = '__all__' 
     widgets = { 
      'my_image': forms.FileInput(), 
     } 

Теперь вы можете использовать этот класс формы на тех местах, где вы хотите изменения.

+0

Спасибо! установить виджет поля как FileInput() было достаточно – juankysmith