Джанго: как использовать отношения «многие ко многим» в значениях ()? - PullRequest
0 голосов
/ 31 декабря 2010

Мне нужно сгруппировать результаты по полю, для которого требуется несколько объединений из исходной модели:

// response_filter_args is created dynamically
responses = Response.objects.filter(**response_filter_args) \
        .values('customer__tags__tag') \                  # django doesn't like this
        .annotate(average_score=Avg('rating__score'))

Ответ -> клиент -> теги (поле многие ко многим указывает на тег) ->tag (тег в виде строки)

Модели:

class Response(models.Model):
    customer = models.ForeignKey(Customer)
    ...

class Customer(models.Model):
    tags = models.ManyToManyField(Tag)
    ...

class Tag(models.Model):
    tag = models.CharField(max_length=255)
    ...

Я пытаюсь подсчитать средний рейтинг.чтобы заставить его работать, мне нужно указать django группировать по тегу, но он отказывается.выдает ошибку:

Invalid field name: 'customer__tags__tag'

Кто-нибудь знает, как я могу получить его для группировки по тегу?Я попробовал все комбинации подчеркивания в тегах customer_ _tag, о которых я могу думать, но ничего не работает.

Ответы [ 2 ]

3 голосов
/ 31 декабря 2010

Если вы посмотрите документы Django для значений () , вы увидите, что поддержка многих для многих была добавлена ​​только в версии для разработки, а - не в 1.2 :

Метод values ​​(), ранее [pre dev version], ничего не возвращал для атрибутов ManyToManyField и выдает ошибку, если вы попытаетесь передать ему этот тип поля.

0 голосов
/ 31 декабря 2010

Я не думаю, что это сработает, поскольку django не может получить объекты, связанные через отношение ManyToMany, с одним запросом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...