Résolue

Question sur l'utilisation du modèle BlogPost

# Django

Hello,
Dans l'exemple de la vidéo, cela marche même en retirant model = BlogPost, sans doute parce que juste en dessous on écrit form_class = BlogPostForm, et qu'il y a déjà dans la classe BlogPostForm la référence au modèle.
Mais peut-être est-ce une bonne pratique de le mettre quand même? Merci pour vos lumières sur point.

Bonjour Simon,

La bonne pratique est de mettre l'attribut model.

Django arrive à gérer le cas que tu viens de donner.
Mais c'est moins conventionnel et moins lisible pour les autres (et toi même).

Tu peux d'ailleur t'amuser au fur et à mesure à regarder le code source et l'héritage :

class ModelFormMixin(FormMixin, SingleObjectMixin):
    """Provide a way to show and handle a ModelForm in a request."""

    fields = None

    def get_form_class(self):
        """Return the form class to use in this view."""
        if self.fields is not None and self.form_class:
            raise ImproperlyConfigured(
                "Specifying both 'fields' and 'form_class' is not permitted."
            )
        if self.form_class:
            return self.form_class
        else:
            if self.model is not None:
                # If a model has been explicitly provided, use it
                model = self.model
            elif getattr(self, "object", None) is not None:
                # If this view is operating on a single object, use
                # the class of that object
                model = self.object.__class__
            else:
                # Try to get a queryset and extract the model class
                # from that
                model = self.get_queryset().model

            if self.fields is None:
                raise ImproperlyConfigured(
                    "Using ModelFormMixin (base class of %s) without "
                    "the 'fields' attribute is prohibited." % self.__class__.__name__
                )

            return model_forms.modelform_factory(model, fields=self.fields)

Bonne journée ! :)

Merci beaucoup Gabriel ! Et dans la suite de la formation je viens de voir que la réponse avait déjà été posée et résolue, avec la subtilité que ce qui peut marcher pour les CreateView ne marchera pas pour les UpdateView: https://www.docstring.fr/formations/les-vues-fondees-sur-les-classes/la-classe-updateview-1374/?tab=questions Bizarre bizarre, mais il faut bien que django ait de micro-incohérences quand même 😄!

Thierry Chappuis

Mentor

D'ailleurs, dans le sens inverse, nous ne sommes pas obligé de créer un formulaire pour utiliser une CreateView. On peut simplement utiliser les champs model et fields de la CreateView.

Thierry

Inscris-toi

(c'est gratuit !)

Inscris-toi

Tu dois créer un compte pour participer aux discussions.

Créer un compte

Rechercher sur le site

Formulaire de contact

Inscris-toi à Docstring

Pour commencer ton apprentissage.

Tu as déjà un compte ? Connecte-toi.