2012-08-28 31 views
28

Có cách nào (không sử dụng biểu mẫu) để truy cập giá trị của các trường mẫu 'lựa chọn' không?Truy cập lĩnh vực Django.choices

tôi muốn làm một cái gì đó giống như field.choices - và có được danh sách các giá trị hoặc trong một cái nhìn hoặc mẫu

Trả lời

3

Tôi nghĩ rằng bạn đang tìm kiếm get_fieldname_display() chức năng.

34

Chắc chắn, chỉ cần truy cập thuộc tính choice của trường Mô hình.

MyModel._meta.get_field('foo').choices 
my_instance._meta.get_field('foo').choices 
+0

gì nếu tôi muốn họ trong các mẫu django của tôi? –

+1

Mọi thứ có thể truy cập trong chế độ xem của bạn đều có thể truy cập được trong mẫu, bạn chỉ cần chuyển nó vào ngữ cảnh mẫu. Vì điều này bắt đầu bằng dấu gạch dưới, bạn sẽ phải tự chuyển trường thể hiện vào ngữ cảnh. –

+0

hoàn hảo! Chính xác những gì tôi đã cố gắng tìm kiếm trong nguồn lol .. – Amyth

4

Nếu bạn đang tuyên bố lựa chọn của bạn như thế này:

class Topic(models.Model): 

    PRIMARY = 1 
    PRIMARY_SECONDARY = 2 
    TOPIC_LEVEL = ((PRIMARY, 'Primary'), 
        (PRIMARY_SECONDARY, 'Primary & Secondary'),) 

    topic_level = models.IntegerField('Topic Level', choices=TOPIC_LEVEL, 
      default=1) 

Đó là một cách tốt để làm việc đó thực sự. Xem: http://www.b-list.org/weblog/2007/nov/02/handle-choices-right-way/

Sau đó, bạn có thể lấy lại những lựa chọn đơn giản với Topic.TOPIC_LEVEL

+0

Tôi đang sử dụng cách này theo quan điểm của tôi, nhưng thay vì nhận được 'Chính, Tiểu học & Trung học' (như trong ví dụ trên) tôi nhận được' (CHÍNH, 'Chính'), (PRIMARY_SECONDARY, 'Chính & Phụ ') '. Tại sao vậy, và làm thế nào để sửa chữa nó? –

+1

@LjubisaLivac Lý do là bạn đã khai báo biến 'TOPIC_LEVEL' làm bộ các cặp' (database_value, 'readable_value') 'và bây giờ bạn đang lấy nó chính xác như bạn đã nhập. Có nhiều lợi thế khi thực hiện nó, một trong số đó là khả năng đọc được đối với người tiếp theo xử lý mã của bạn. Điều này không bị hỏng: nhiều ứng dụng thay vì sẽ có giá trị cơ sở dữ liệu thực tế thay vì giá trị có nghĩa là được đọc bởi con người. Nếu bạn chỉ muốn các chuỗi, bạn có thể lấy chúng với '[i [1] cho i trong chủ đề.TOPIC_LEVEL]'. –

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