Mam model Django z niektórych pól, które mają określone wartości domyślne. Szukam pobrać domyślną wartość dla jednego z tych pól dla nas później w moim kodzie. Czy istnieje prosty sposób na pobranie wartości domyślnej określonego pola z modelu?Jak uzyskać wartość domyślną dla pola w modelu Django?
21
A
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
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()
nic z _ jest kopanie w wewnętrznych. Zobacz moje pytanie: http://stackoverflow.com/questions/1011946/django-know-if-property-is-the-default-value –
W dzisiejszych czasach metoda 'get_field_by_name' zwraca krotkę z obiektem pola jako pierwszą pozycją. – Adam
@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'. –