Проверьте, имеет ли экземпляр Django ModelForm
Я хотел бы отобразить предупреждающее сообщение, если я вхожу в форму редактирования и спрячу его, если я в форме создания Django ModelForm.
form.is_bound
скажите, была ли ранее заполнена форма, но как проверить, был ли ModelForm установлен с существующим экземпляром?
Я пробовал это hasattr(form.instance, 'pk')
, но это правильный способ сделать это?
Приветствия,
Natim
Ответы
Ответ 1
Попробуйте проверить, является ли form.instance.pk
None
.
hasattr(form.instance, 'pk')
всегда будет возвращать True
, поскольку каждый экземпляр модели имеет поле pk
, даже если он еще не был сохранен в базе данных.
Как отметил @Paullo в комментариях, это не будет работать, если вы вручную определите свой первичный ключ и задаете значение по умолчанию, например, default=uuid.uuid4
.
Ответ 2
Я столкнулся с этой проблемой, но в моем случае я использую UUID для PK. Хотя принятый ответ верен для большинства случаев, но не дает результатов, если вы не используете автоматическое увеличение PK по умолчанию в Django.
Определение свойства модели дает мне возможность получить доступ к этому значению из Model, View и Template как атрибута модели
@property
def from_database(self):
return not self._state.adding
Ответ 3
Поскольку существующий экземпляр будет передан в качестве аргумента с ключевым словом instance
для создания формы модели, вы можете наблюдать это в своем пользовательском инициализаторе.
class Foo(ModelForm):
_newly_created: bool
def __init__(self, *args, **kwargs):
self._newly_created = kwargs.get('instance') is None
super().__init__(*args, **kwargs)