J'ai un modèle Django avec des champs qui ont des valeurs par défaut spécifiées. Je cherche à saisir la valeur par défaut pour l'un de ces champs pour nous plus tard dans mon code. Existe-t-il un moyen facile de saisir la valeur par défaut d'un champ particulier à partir d'un modèle?Comment obtenir la valeur par défaut d'un champ dans un modèle Django?
21
A
Répondre
15
Vous pouvez obtenir le champ comme ceci:
myfield = MyModel._meta.get_field_by_name('field_name')
et la valeur par défaut est juste un attribut du champ:
myfield.default
35
TheModel._meta.get_field('the_field').get_default()
+2
Cela devrait être la bonne réponse maintenant. – Teekin
0
Si vous avez besoin des valeurs par défaut pour plus d'un champ (par exemple dans une sorte d'étape de réinitialisation), il peut être utile d'instancier un nouvel objet temporaire de votre modèle et d'utiliser les valeurs de champ de cet objet.
temp_obj = MyModel()
obj.field_1 = temp_obj.field_1 if cond_1 else 'foo'
...
obj.field_n = temp_obj.field_n if cond_n else 'bar'
Bien sûr, cela vaut la peine, si l'objet temporaire peut être construit sans autres problèmes de performance/dépendance.
9
Comme de Django 1.9.x vous pouvez utiliser:
field = TheModel._meta.get_field('field_name')
default_value = field.get_default()
Quelque chose avec un _ est creuser dans les entrailles. Voir ma question: http://stackoverflow.com/questions/1011946/django-know-if-property-is-the-default-value –
De nos jours, la méthode 'get_field_by_name' renvoie un tuple avec l'objet champ comme premier élément. – Adam
@PaulTarjan vous avez raison, mais le '_meta' est l'un de ces éléments bien établis, pas trop susceptibles de changer. Le consensus général est qu'il est correct d'accéder directement au '_meta 'd'un modèle. –