Tôi có một mô hình Django với một số trường có giá trị mặc định được chỉ định. Tôi đang tìm cách lấy giá trị mặc định cho một trong các trường này cho chúng tôi sau này trong mã của tôi. Có cách nào dễ dàng để lấy giá trị mặc định của một trường cụ thể từ một mô hình không?Làm cách nào để nhận giá trị mặc định cho trường trong mô hình Django?
21
A
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
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()
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 –
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
@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. –