Question sur l'utilisation du modèle BlogPost
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 😄!
Inscris-toi
(c'est gratuit !)
Tu dois créer un compte pour participer aux discussions.
Créer un compte