django order按相关模型中的字段返回重复的对象

ie3xauqp  于 2021-09-29  发布在  Java
关注(0)|答案(1)|浏览(317)

我有这两种型号:

class Product(models.Model):
    name = models.CharField(max_length=100)
    ...

class ProductPack(models.Model):
    product = models.ForeignKey(Product, on_delete=models.CASCADE)
    ...
    price = models.PositiveIntegerField(default=0)

我有一个产品型号查询集:

products = Product.objects.all()

# <ProductQuerySet [<Product: first product>]>

我想订购按“产品 Package 价格”查询的产品。所以我试着通过以下代码来实现:

qs = products.order_by("productpack__price")

这在一定程度上是正确的。但有一个问题。对于产品中的每个对象,此代码将对象返回到productpack中的foreignkey计数。这样地:

qs
<ProductQuerySet [<Product: first product>, <Product: first product>, <Product: first product>]>

如何解决这个问题。你有什么建议吗?

r7s23pms

r7s23pms1#

按相关字段订购时,如果 product 与多个 productpacks ,则在 queryset 每人一次 productpack .
这可能是您的解决方案:

from django.db.models import Max  

products = Product.objects.annotate(
    price=Max("productpack__price")
).order_by("price")

相关问题