Sự lựa chọn trong hướng dẫn ứng dụng Django này là gì?


144

Có dòng này trong hướng dẫn Django, Viết ứng dụng Django đầu tiên của bạn, phần 1 :

p.choice_set.create(choice='Not much', votes=0)

Làm thế nào được choice_setgọi là tồn tại và nó là gì?

Tôi cho rằng choicemột phần là phiên bản chữ thường của mô hình Choiceđược sử dụng trong hướng dẫn, nhưng đó là choice_setgì? Bạn có thể xây dựng?

CẬP NHẬT: Dựa trên câu trả lời của Ben , tôi đã tìm tài liệu này: Theo các mối quan hệ "lạc hậu" .


Tôi chỉ nên liên kết với tài liệu đó, nó rõ ràng hơn câu trả lời của tôi.
Ben James

@Ben James: không, tôi đánh giá cao việc xây dựng nó theo một cách khác, đặc biệt là việc xây dựng những gì ORM đang làm. Các tài liệu Django có thể rất ngắn gọn.
Peter Mortensen

40
Cảm ơn bạn đã hỏi điều này, tôi đã bối rối vì điều này vì họ không giải thích nó trong hướng dẫn.
claudio

4
Ồ, đó là một dòng mã được tải cho một người mới. Đối với tôi, trở ngại là sự hiểu biết rằng chúng ta đang có một Đối tượng lựa chọn, liên quan đến Câu hỏi, để sau đó tăng sự lựa chọn của mình. Khái niệm liên quan đã không được đề cập trong hướng dẫn cho đến thời điểm này để nó có thể là một vấp ngã thực sự.
Frozenjim 6/08/2015

@PeterMortensen bạn có thể vui lòng cập nhật tài liệu được mô tả ở đâu không? cảm ơn bạn
MH

Câu trả lời:


178

Bạn đã tạo một khóa ngoại Choiceliên quan đến từng khóa một Question.

Vì vậy, mỗi trường Choicerõ ràng có một questiontrường mà bạn đã khai báo trong mô hình.

ORM Django theo ngược mối quan hệ từ Questionquá, tự động tạo ra một lĩnh vực trên mỗi trường hợp được gọi là foo_setnơi Foolà mô hình với một ForeignKeylĩnh vực để mô hình đó.

choice_setlà một RelatedManagercái có thể tạo các truy vấn của Choicecác đối tượng liên quan đến Questionthể hiện, vdq.choice_set.all()

Nếu bạn không thích foo_setcách đặt tên mà Django chọn tự động hoặc nếu bạn có nhiều khóa ngoại cho cùng một mô hình và cần phân biệt chúng, bạn có thể chọn tên ghi đè của riêng mình bằng cách sử dụng related_nameđối số ForeignKey.


Cảm ơn. Tôi biết nhiều hơn bây giờ. Không phải là sự lựa chọn_set một "Người quản lý"? (có thể trả về một thể hiện của lớp Queryset). Hay là nó giống nhau?
Peter Mortensen

2
Bạn đã đúng, đó là một RelatedManagerthứ có thể tạo ra các truy vấn.
Ben James
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.