Как сделать обратный поиск для всех записей в Django? - PullRequest
2 голосов
/ 21 сентября 2011

Я пытаюсь выполнить обратный поиск SQL, используя Django 1.3. Я нашел много связанных вопросов, но, к сожалению, я могу найти ответ только для одной записи, а не для нескольких записей одновременно.

По сути, это мой случай: у меня есть модель «Техника», которая выглядит так:

class Technique(models.Model):
    title = models.CharField(max_length=32)
    description = models.CharField(max_length=256)
    skill_level = models.IntegerField()
    parent_technique = models.ForeignKey('self', blank=True, null=True)

На данный момент я просто делаю список всех техник без родителей.

t = get_list_or_404(Technique.objects.filter(parent_technique=None))

Теперь я хочу (или, по крайней мере, думаю, что хочу), чтобы все записи в t получили дополнительное поле 'childs', в котором перечислены все техники, которые перечисляют текущую технику как своего родителя. Может ли кто-нибудь помочь мне с этим?

Кроме того, если это еще один способ добиться того, чего я хочу, пожалуйста, не стесняйтесь вносить это. Я только начал использовать Django, поэтому, возможно, не знаю ни о каких альтернативных способах.

Заранее большое спасибо!

Ответы [ 2 ]

8 голосов
/ 21 сентября 2011

Это уже встроено - см. следующие отношения в обратном направлении .

В вашем случае просто выполните:

obj.technique_set.all()

для каждого obj в t.

4 голосов
/ 21 сентября 2011

в модели добавить related_name

parent_technique = models.ForeignKey('self', blank=True, null=True, related_name="childrens_tech")

все дочерние методы smt_technique:

smt_technique.childrens_tech.all()
...