Как подсчитать вхождения в запросе Django и вернуть список с атрибутом - PullRequest
0 голосов
/ 06 апреля 2020

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

powderList = Build.objects.values('powder').annotate(total_count=Count('powder')).order_by('total_count')

возвращает:

{'powder': None, 'total_count': 0}, {'powder': 1, 'total_count': 2}, {'powder': 2, 'total_count': 2}

Что очень близко к тому, что я хочу, однако это отображает id из powder. Я хотел бы получить доступ к атрибуту порошка (powder.name), чтобы он выводил вместо него:

{'powder': None, 'total_count': 0}, {'powder': Titanium, 'total_count': 2}, {'powder': Steel, 'total_count': 2}

Я попытался:

powderList = Build.objects.values('powder.name').annotate(total_count=Count('powder')).order_by('total_count')

powderList = Build.objects.values('powder').annotate(total_count=Count('powder.name')).order_by('total_count')

Мой следующий план - использовать for loop для перебора диктов и поиска имени по идентификатору, но это будет каждый раз попадать в базу данных. Есть ли более эффективный правильный способ сделать это?

Мои модели выглядят так:

class Build(models.Model): #(DMLS)
    PSScustomer = models.ForeignKey(Customer, on_delete=models.CASCADE)
    plannedAuthor =  models.ForeignKey(CustomUser,related_name='+',blank=True, null= True, on_delete=models.CASCADE)
    powder =  models.ForeignKey('Powder', null=True, blank=True, on_delete=models.CASCADE)


class Powder(models.Model):
    PSScustomer = models.ForeignKey(Customer, on_delete=models.CASCADE)
    name = models.CharField(max_length=50,)

1 Ответ

3 голосов
/ 06 апреля 2020

Вы пробовали это,

powderList = Build.objects.<b>values('powder__name')</b>.annotate(total_count=Count('powder')).order_by('total_count')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...