Получение уникальных иностранных ключей в Django? - PullRequest
4 голосов
/ 29 ноября 2009

Предположим, моя модель выглядит так:

class Farm(models.Model):
   name = ...

class Tree(models.Model):
   farm = models.ForeignKey(Farm)

... и я получаю QuerySet из Tree объектов. Как определить, какие фермы представлены в этом QuerySet?

Ответы [ 3 ]

6 голосов
/ 30 ноября 2009

http://docs.djangoproject.com/en/dev/ref/models/querysets/#in

Farm.objects.filter(tree__in=TreeQuerySet)
4 голосов
/ 29 ноября 2009

Возможно, есть лучший способ сделать это с помощью Django ORM и сохранить его ленивым, но вы можете получить то, что вы хотите, с обычным питоном (вне моей головы):

>>> set([ t.farm for t in qs ])
0 голосов
/ 30 ноября 2009

Вот способ, которым база данных сделает всю работу за вас:

farms = qs.values_list('farm', flat=True).distinct() 
#values_list() is new in Django 1.0

Возвращаемое значение должно оцениваться примерно так:

(<Farm instance 1>, <Farm instance5>)

где будут фермы с деревьями в этом конкретном наборе запросов.

Для всех ферм с деревьями используйте qs = Tree.objects

Имейте в виду, что если вы добавите order_by('some_other_column'), то к различным комбинациям 'farm' и 'some_other_column' будут применяться разные, потому что другой столбец также будет в запросе sql для упорядочения. Я думаю, что это ограничение (не предполагаемая функция) в API, оно описано в документации .

...