Джанго: Как следовать за 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") # long name since parent is reserved

Я могу сделать :

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

это здорово. Но как мне получить всех детей?

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

не работает (и, вероятно, должно иметь несколько обозначений вокруг него), и я не вижу слишком много при поиске.

Является ли это возможным? Попасть в SQL?

Ответы на вопрос(2)

Решение Вопроса

По умолчанию django будет вызывать имя модели в обратном порядке, после чего следует "_set", поэтому это будет

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

Если вам это не подходит, используйте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
 Paul Tarjan12 июл. 2009 г., 03:33
замечательно. отлично работал купил бы снова. A ++

Не знаю, если это лучший способ, но это также делает работу

Achievement.objects.filter(parent_achievement=1)

или же

Achievement.objects.filter(parent_achievement__pk=1)

Ваш ответ на вопрос