2009-07-12 24 views
10
class Achievement(MyBaseModel): 
    parent_achievement = models.ForeignKey('self', blank=True, null=True, help_text="An achievement that must be done before this one is achieved") # long name since parent is reserved 

tôi có thể làm:Django: Làm thế nào để theo ForeignKey ('tự') ngược

Achievement.objects.get(pk="1").parent_achievement 

đó là rất tốt. Nhưng làm thế nào để tôi có được tất cả các trẻ em?

Achievement.objects.get(pk="1").parent_achievement_set 

không hoạt động (và có thể cần thêm ký hiệu nữa) và tôi không thấy quá nhiều khi tìm kiếm.

Có thể không? Rơi vào SQL?

Trả lời

16

Theo mặc định, django sẽ gọi đảo ngược tên mô hình, tiếp theo là "_set", do đó nó sẽ là

Achievement.objects.get(pk="1").achievement_set 

Nếu điều đó không phù hợp với bạn, sử dụng đối số tùy chọn related_name để models.ForeignKey:

class Achievement(MyBaseModel): 
    parent_achievement = models.ForeignKey(
     'self', 
     blank=True, 
     null=True, 
     help_text="An achievement that must be done before this one is achieved", 
     related_name="child_achievement_set" 
    ) # long name since parent is reserved 

Achievement.objects.get(pk="1").child_achievement_set 
+7

tuyệt vời. làm việc tuyệt vời. sẽ mua lại. A ++ –

1

không biết nếu điều này là cách tốt nhất, nhưng điều này cũng được công việc làm

Achievement.objects.filter(parent_achievement=1) 

hoặc

Achievement.objects.filter(parent_achievement__pk=1) 
Các vấn đề liên quan