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

25
demandé sur Natim 2012-03-14 18:38:34

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.

45
répondu Alasdair 2012-03-14 14:43:11

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)
1
répondu WeZZard 2018-10-02 21:52:33