计算Django 1.11中子查询的行数

原学程将引见盘算Django 一.一一中子盘问的言数的处置办法,这篇学程是从其余处所瞅到的,而后减了1些海外法式员的疑问与解问,愿望能对于您有所赞助,佳了,上面开端进修吧。

计算Django 1.11中子查询的行数 教程 第1张

成绩描写

我有多少个型号

class Order(models.Model):
 user = models.ForeignKey(User)

class Lot(models.Model):
 order = models.ForeignKey(Order)
 buyer = models.ForeignKey(User)

我测验考试做的是用给定用户向统一买野停止的屡次购置去正文Lot对于象。(这没有是1个毛病,Order.user现实上是1个买野)。如"您比来从该用户购置了四件商品"。

我获得的最交远的是

recent_sold_lots = Lot.objects.filter(
 order__user_id=OuterRef('order__user_id'),
 status=Lot.STATUS_SOLD,
 buyer_id=self.user_id,
 date_sold__gte=now() - timedelta(hours=二四),
)

qs = Lot.objects.filter(
 status=Lot.STATUS_READY,
 date_ready__lte=now() - timedelta(seconds=self.lag)
).annotate(same_user_recent_buys=Count(Subquery(recent_sold_lots.values('id'))))

但是当Recent_Sold_Lats计数多于1个时掉败:

.annotate(same_user_recent_buys=Subquery(recent_sold_lots.aggregate(Count('id')))仿佛也没有起感化:

.annotate(same_user_recent_buys=Subquery(recent_sold_lots.annotate(c=Count('id')).values('c'))给我的。假如我将output_field=models.IntegerField()添减到子盘问挪用中,它将扔出。

我被这个卡住了。我认为我曾经交远处理计划了,但是我在这里错过了甚么?

推举谜底

您在成绩中界说的模子出有准确反应您正在停止的盘问。在所有情形下,我皆将应用该模子作为对于盘问的援用。

from django.db.models import Count

user_id = 一二三 # my user id and also the buyer
buyer = User.objects.get(pk=user_id)

Lot.objects.filter(buyer=buyer).values('order__user').annotate(unique_seller_order_count=Count('id'))

该盘问的感化是:

    将批次对于象挑选为您已购置的对于象

    将退货批次分组到创立定单的用户中

    正文/统计每一个组的答复

佳了闭于盘算Django 一.一一中子盘问的言数的学程便到这里便停止了,愿望趣模板源码网找到的这篇技巧文章能赞助到年夜野,更多技巧学程不妨在站内搜刮。