Test si Django ModelForm a une instance
Je voudrais afficher un message d'avertissement si je suis dans un formulaire d'édition et de le cacher si je suis dans un formulaire de création d'un Django ModelForm.
form.is_bound
dites - moi si le formulaire a déjà été rempli Mais comment tester si le ModelForm a été défini avec une instance existante ?
J'ai essayé ceci hasattr(form.instance, 'pk')
mais est-ce la bonne façon de le faire ?
Santé,
Natim
2 réponses
Essayer de vérifier si form.instance.pk
est None
.
hasattr(form.instance, 'pk')
retournera toujours True
, car chaque instance de modèle a un champ pk
, même si elle n'a pas encore été enregistrée dans la base de données.
Puisque l'instance existante serait passée en argument avec le mot-clé instance
pour créer le formulaire modèle, vous pouvez l'observer dans votre initialiseur personnalisé.
class Foo(ModelForm):
_newly_created: bool
def __init__(self, *args, **kwargs):
self._newly_created = kwargs.get('instance') is None
super().__init__(*args, **kwargs)