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.
+0
-0