Виджет Джанго, который зависит от модели
Я довольно новичок в Django и у меня есть вопрос. Я получил ModelForm с помощью виджетов. Так как у меня есть поле под названием discount
которую я хочу редактировать только в том случае, если отображаемая модель полностью удовлетворяет некоторым требованиям, я делаю ее доступной только для чтения, используя запись виджета:
class Meta:
widgets = {'discount': forms.TextInput(attrs={'readonly': True})}
Теперь я хочу сделать возможной запись в это поле снова, если модель (здесь называемая Порядок) имеет тип поля, установленный в целочисленное значение 0.
Я пытался сделать это в шаблоне HTML, но не удалось. Поэтому моя следующая идея - сделать виджет как-то зависимым от модели, которую он отображает, так что в некотором роде псевдокод:
class Meta:
widgets = {'discount': forms.TextInput(attrs={'readonly': currentModel.type == 0})}
Есть ли правильный способ сделать что-то подобное? заранее спасибо
2 ответа
Вы можете переписать __init__
вашей модели формы класса для изменения виджета:
class MyModelForm(...):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs):
instance = kwargs['instance']
self.fields['discount'].widget.attrs['readonly'] = instance.type == 0
Стоит отметить, что установка виджета только для чтения не мешает злонамеренному пользователю изменять поле в любом случае. Убедитесь, что правильно проверили на стороне сервера.
Если вы не определите экземпляр модели при создании формы, у вас будет общее определение модели, а не экземпляр модели. Похоже, вы захотите изменить поведение формы после взаимодействия с пользователем, для этого вам нужно использовать JavaScript.