2009-08-20 7 views

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

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 –

+9

De nos jours, la méthode 'get_field_by_name' renvoie un tuple avec l'objet champ comme premier élément. – Adam

+0

@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. –

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()