2010-03-04 16 views
13

Model1 có ForeignKey to Model2. Và Model2 có một ForeignKey (Model3, null = True, blank = True) thành Model3. Theo mặc định, khi tôi sử dụng select_related() trên Model1, Model3 không được chọn vì null = True. Làm thế nào tôi có thể buộc select_related() để theo một ngoại lệ đã có null = True?Làm thế nào để buộc select_related() để chọn ForeignKeys có null = True thuộc tính?

Cách duy nhất tôi có thể nghĩ đến là chọn một cách rõ ràng các phím nước ngoài:

model1s = Model1.objects.all().select_related('model2', 'model2__model3') 

Đây có phải là con đường duy nhất?

Trả lời

14

Có, đó là cách bạn sẽ đi về việc chọn các mục có liên quan bằng null = True.

Straight từ docs for select_related:

Bạn có thể tham khảo bất kỳ ForeignKey hoặc liên quan OneToOneField trong danh sách các lĩnh vực truyền cho select_related. Ths bao gồm các khóa ngoại có null = True (không giống như lời gọi select_related() mặc định).

Có lý do nào bạn cần một cách khác để thực hiện tác vụ này không? Nếu không, bạn đã có nó rồi.

+0

Tôi có nhiều trường ForeignKey được đặt thành null = True. Tôi không muốn liệt kê tất cả. Nhưng tôi đoán là tôi phải làm vậy. –

+1

Bạn lại đúng. Nó có vẻ như rất nhiều cách gõ nhưng điều này là về mặt kỹ thuật một chút của một trường hợp sử dụng góc. Tuy nhiên, tốt hơn là không thể chọn liên kết. Vui lòng thêm câu trả lời của riêng bạn nếu bạn nghĩ ra điều gì đó khác biệt. – istruble

+0

Đã dành tuổi tìm kiếm nội dung này .. cảm ơn câu hỏi và câu trả lời! – John

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