Django: запрос с подсчетом ManyToManyField? - PullRequest
1 голос
/ 29 декабря 2010

Как в Django создать запрос COUNT для ManyToManyField?

Мои модели выглядят следующим образом, и я хочу, чтобы все люди, чье имя начиналось с буквы А и являлись лордом или повелителем хотя бы одного места, и упорядочивали результаты по имени.

class Manor(models.Model):
    lord = models.ManyToManyField(Person, null=True, related_name="lord")
    overlord = models.ManyToManyField(Person, null=True, related_name="overlord")
class Person(models.Model):
    name = models.CharField(max_length=100)

Итак, мой запрос должен выглядеть примерно так ... но как мне построить третью строку?

people = Person.objects.filter(
       Q(name__istartswith='a'), 
       Q(lord.count > 0) | Q(overlord.count > 0) # pseudocode
).order_by('name'))

Ответы [ 2 ]

1 голос
/ 29 декабря 2010

На самом деле здесь интересует не количество, а то, есть ли в этих отношениях какие-либо участники.

Q(lord__isnull=False) | Q(overlord__isnull=False) 
0 голосов
/ 29 декабря 2010

В этом случае лучше прибегнуть к raw SQL .

for p in Person.objects.raw('SELECT * FROM myapp_person WHERE...'):
    print p
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...