Подсчет объектов foreignkey в django

предположить

class Product(models.Model):
    user = models.ForeignKey(User,...)
    ...

class Sold(models.Model):
    post = models.ForeignKey(post,...)
    buyer = models.ForeignKey(User,...)

Как получить количество проданных товаров, используя модель User Что-то вроде User.objects.all().annotate(nbuy=Count("?"))

Постановка "sold" на место "?" дает количество купленных пользователем предметов. Что нужно сделать, чтобы получить количество предметов, проданных пользователем?

Вы можете сделать это, если запросите модель Sold следующим образом:

Sold.objects.values('buyer').annotate(nbuy=Count('buyer'))

# returns -> {'buyer': 1, 'nbuy': 23}

Это возвращает идентификатор пользователя и количество объектов Sale, которые существуют с этим идентификатором пользователя.

Технически User.objects.all().annotate(nbuy=Count("sold")) подсчитывает все Sold объекты, связанные с пользователем по ForeignKey. Если я правильно понимаю вашу модель, ссылка представляет покупателя, поэтому вы получаете количество продуктов, которые купил пользователь.

Я полагаю, что user в вашем Product представляет собой предложение пользователя, т.е. продажу продукта, поэтому User.objects.all().(nsold=Count("product")) даст вам это число.

Вернуться на верх