2009-08-20 9 views

Trả lời

15

Bạn có thể nhận lĩnh vực này như thế này:

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

và mặc định chỉ là một thuộc tính của trường:

myfield.default 
+0

Bất cứ điều gì với một _ được đào hơn vào bên. Xem câu hỏi của tôi: http://stackoverflow.com/questions/1011946/django-know-if-property-is-the-default-value –

+9

Ngày nay phương thức 'get_field_by_name' trả về một tuple với đối tượng trường làm mục đầu tiên của nó. – Adam

+0

@PaulTarjan bạn nói đúng, nhưng '_meta' là một trong những yếu tố được thiết lập tốt, không quá có khả năng thay đổi. Sự đồng thuận chung là có thể truy cập trực tiếp vào mô hình '_meta' của mô hình. –

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

Đây sẽ là câu trả lời chính xác ngay bây giờ. – Teekin

0

Nếu bạn cần các giá trị mặc định cho nhiều hơn một lĩnh vực (ví dụ như trong một số loại bước khởi động lại) nó có thể có giá trị để chỉ nhanh chóng một đối tượng tạm thời mới của mô hình của bạn và sử dụng các giá trị trường từ đối tượng đó.

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' 

Tất nhiên điều này chỉ đáng giá nếu đối tượng tạm thời có thể được xây dựng mà không có vấn đề về hiệu suất/phụ thuộc.

9

Tính đến Django 1.9.x bạn có thể sử dụng:

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