2009-08-20 7 views

Odpowiedz

15

można uzyskać pole tak:

myfield = MyModel._meta.get_field_by_name('field_name') 

i domyślnie jest tylko atrybutem polu:

myfield.default 
+0

nic z _ jest kopanie w wewnętrznych. Zobacz moje pytanie: http://stackoverflow.com/questions/1011946/django-know-if-property-is-the-default-value –

+9

W dzisiejszych czasach metoda 'get_field_by_name' zwraca krotkę z obiektem pola jako pierwszą pozycją. – Adam

+0

@PaulTarjan masz rację, ale '_meta' jest jedną z tych dobrze ugruntowanych, niezbyt skłonnych do zmiany elementów. Ogólny konsensus jest taki, że można uzyskać bezpośredni dostęp do modelu '_meta'. –

35
TheModel._meta.get_field('the_field').get_default() 
+2

To powinno być teraz poprawną odpowiedzią. – Teekin

0

Jeśli potrzebujesz domyślne wartości dla więcej niż jednej pole (np. w pewnym etapie reinicjalizacji) może warto po prostu utworzyć instancję tymczasową nowego obiektu i użyć wartości pól z tego obiektu.

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' 

Oczywiście jest to tylko tego warte, jeśli obiekt tymczasowy może być zbudowany bez dalszych problemów wydajności/zależności.

9

Od Django 1.9.x można użyć:

field = TheModel._meta.get_field('field_name') 
default_value = field.get_default()