Django order根据相关模型中的字段返回重复的对象

2024-10-01 15:29:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这两种型号:

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>]>

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

qs = products.order_by("productpack__price")

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

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

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


Tags: 对象代码model产品modelsproductpriceclass
1条回答
网友
1楼 · 发布于 2024-10-01 15:29:05

当您按productpacks排序时,如果一个product与多个productpacks相关,它将在queryset中为每个productpack返回一次

这可能是您的解决方案:

from django.db.models import Max  


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

相关问题 更多 >

    热门问题