2010-03-11 19 views
25

Tôi muốn có quyền truy cập vào một verbose_name trường mô hình của mình.Làm cách nào để có quyền truy cập vào tên chi tiết trường Mô hình Django động?

Tôi có thể lấy nó bằng indice lĩnh vực như thế này

model._meta._fields()[2].verbose_name 

nhưng tôi cần phải làm cho nó tự động. Lý tưởng nhất nó sẽ là một cái gì đó như thế này

model._meta._fields()['location_x'].verbose_name 

Tôi đã xem xét một vài điều nhưng tôi không thể tìm thấy nó.

Trả lời

45

Đối với Django < 1.10:

model._meta.get_field_by_name('location_x')[0].verbose_name 
+0

tôi nhận được ' 'str' đối tượng không có thuộc tính '_meta'' lỗi. Django 1.7. –

+3

@MikhailBatcer: Tôi không biết làm thế nào để phá vỡ điều này cho bạn, nhưng ... dây không có các lĩnh vực. –

+0

Vâng, đó là đối tượng mô hình được chuyển trong đoạn mã của bạn chứ không phải chuỗi, phải không? –

7
model._meta.get_field_by_name('location_x')[0].verbose_name 
12

model._meta.get_field('location_x').verbose_name

12

Câu trả lời được lựa chọn cho một đối tượng proxy mà có thể trông như dưới đây.

<django.utils.functional.__proxy__ object at 0x{SomeMemoryLocation}> 

Nếu có ai được nhìn thấy nhau, bạn có thể tìm thấy những chuỗi cho tên dài dòng trong tiêu đề() hàm thành viên của đối tượng proxy.

model._meta.get_field_by_name(header)[0].verbose_name.title() 

Cách tốt hơn để viết những dòng này sẽ là:.

model._meta.get_field(header).verbose_name.title() 

nơi header sẽ là tên của lĩnh vực bạn quan tâm đến ví dụ: 'vị trí x' trong Ops ngữ cảnh.

LƯU Ý: Nhà phát triển Django cũng cảm thấy rằng việc sử dụng get_field tốt hơn và do đó đã khấu hao get_field_by_name trong Django 1.10. Vì vậy, tôi sẽ đề nghị sử dụng get_field cho dù bạn sử dụng phiên bản Django nào.

0

Đối với Django 1.11 và 2.0:

MyModel._meta.get_field('my_field_name').verbose_name 

Thông tin thêm trong Django doc

Các vấn đề liên quan