Django : des valeurs par défaut différentes selon le modèle fils

a marqué ce sujet comme résolu.
Auteur du sujet

Bonjour,

Je travail avec Django 3.0 et j’ai une architecture de modèles de ce type :

class Parent(models.Model):
    myfield = models.CharField(max_length=50)

class Child1(Parent):
    pass

class Child2(Parent):
    pass

class Child3(Parent):
    pass

Je souhaiterais que chaque enfant ait une valeur par défaut spécifique pour myfield. Seulement, je ne sais pas comment faire.

Il est possible de fournir une fonction à default, mais cette fonction ne prend pas la classe courante en paramètre.

En attendant, j’ai fait comme ça :

class Child1(Parent):
    @classmethod
    def default_myfield(cls):
        return "default1"

class Child2(Parent):
    @classmethod
    def default_myfield(cls):
        return "default2"

class Child3(Parent):
    @classmethod
    def default_myfield(cls):
        return "default3"

Et dans mon formulaire :

class ChildForm(ModelForm):
    def __init__(self, *args, **kwargs):
        super().__init__(self, *args, **kwargs)
        self.fields["myfield"].initial = self._meta.model.default_myfield()


def make_form(model):
    return type(
        f"{model.__name__}Form",
        (ChildForm,),
        {
            "Meta": type(
                "Meta",
                (),
                {
                    "model": model,
                    "fields": ["myfield",],
                },
            ),
        },
    )

Merci.

Édité par Vayel

"Bienheureux celui qui sait rire de lui-même, il n’a pas fini de s’amuser." Joseph Folliet

+0 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte