【问题标题】:Count foreignkey objects in django在 django 中计算外键对象
【发布时间】:2022-01-06 18:36:09
【问题描述】:

假设

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

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

现在我如何使用用户模型获得没有售出的物品 类似User.objects.all().annotate(nbuy=Count("?"))

用“sold”代替“?”给出用户购买的物品数量。 我应该怎么做才能获得用户已售出的物品?

【问题讨论】:

    标签: django django-models django-rest-framework django-views django-database


    【解决方案1】:

    如果您像这样查询 Sold 模型,您可以这样做:

    Sold.objects.values('buyer').annotate(nbuy=Count('buyer'))
    
    # returns -> {'buyer': 1, 'nbuy': 23}
    

    这将返回用户 ID 和与该用户 ID 存在的销售对象的数量。

    【讨论】:

    • 这样可以User.objects.values ...吗?
    【解决方案2】:

    从技术上讲,User.objects.all().annotate(nbuy=Count("sold")) 计算通过 ForeignKey 链接到用户的所有 Sold 对象。如果我正确理解您的模型,则链接代表买方,因此您会获得用户购买的产品数量。

    我想你的Product中的user代表用户提供,即销售产品,所以User.objects.all().(nsold=Count("product"))会给你这个数字。

    【讨论】:

    • 无法将关键字“产品”解析为字段
    • 奇怪,用你的模型在我的机器上也能用
    • 允许的字段选择是什么(在堆栈跟踪的最后一行)?
    • 我认为你在这里错过了一些东西User.objects.all().(nsold=Count("product"))
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-08
    • 2011-12-26
    • 1970-01-01
    • 1970-01-01
    • 2017-11-27
    • 2020-04-04
    • 2012-06-03
    相关资源
    最近更新 更多