python - Django order by a field from a related model 返回重复的对象
问题描述
我有这两个模型:
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>]>
我想通过“productpack__price”订购产品查询集。所以我试图通过这段代码来做到这一点:
qs = products.order_by("productpack__price")
这部分工作正常。但是有一个问题。对于产品中的每个对象,此代码将对象返回到它们在 ProductPack 中拥有的外键计数。像这样:
qs
<ProductQuerySet [<Product: first product>, <Product: first product>, <Product: first product>]>
如何解决这个问题。你有什么建议吗?
解决方案
当你 order byproductpacks
时,如果 aproduct
与 multiple 相关productpacks
,则返回queryset
一次 for each productpack
。
这可以是您的解决方案:
from django.db.models import Max
products = Product.objects.annotate(
price=Max("productpack__price")
).order_by("price")
推荐阅读
- amazon-web-services - AWS Cloudwatch 指标上的数学表达式未提供预期输出
- bash - 文件处理:组合具有不同列数和行数的多个文件
- validation - 如何验证车牌字符/代码点?
- slack - 针对 slack events api 验证 botkit
- java - 我可以根据 Java 中的系统规范生成 UID 吗?
- javafx - 如何将 javafx.scene.layout.StackPane 转换为 javafx.scene.shape.Circle
- android - 从上到下滚动时,Listview 图像会被打乱
- swift - 在 Alamofire DownloadRequest.dataResponseSerializer line + 320 中看到断点崩溃
- android - React-native 找不到包 android.support.v7.app
- sorting - 在 power bi 的下拉列表中按月排序