python - 如何在 django 中的子查询集上使用 order 子句过滤查询集
问题描述
我有一个返回有序查询集的基本查询,我应该将该查询集用作另一个查询集的过滤器,但我的第二个查询集没有以相同的顺序返回。
这是我的代码:
queryset = ProductModel.objects.filter(
id__in=SponsoredProductModel.objects.filter(
product_id=self.request.parser_context['kwargs']['pk'],
).order_by('position').values_list('sponsored_product', flat=True),
)
这是我的产品模型:
class ProductModel(basemodel.BaseModel):
# relative fields
company = models.ForeignKey(CompanyModel, on_delete=models.PROTECT)
tax = models.ForeignKey(
TaxModel, on_delete=models.PROTECT,
null=True, blank=True
)
brand = models.ForeignKey(
BrandModel, on_delete=models.PROTECT,
null=True, blank=True
)
name = models.CharField(max_length=200)
unit = models.ForeignKey(
UnitModel, on_delete=models.PROTECT,
null=True, blank=True
这是 SponsoredProductModel:
class SponsoredProductModel(basemodel.BaseModel):
product = models.ForeignKey(
ProductModel, on_delete=models.PROTECT,
related_name='sponsored_base_product'
)
sponsored_product = models.ForeignKey(
ProductModel, on_delete=models.PROTECT,
related_name='sponsored_member_product'
)
position = models.IntegerField(default=-1)
我希望按职位订购我的赞助产品模型并以相同的顺序获得产品。
我怎样才能做到这一点?
解决方案
对值列表进行排序将无济于事,因为数据库只会过滤这些值,而不是对它们进行排序。但是你根本不需要这些。
您可以简单地按sponsored
产品的位置订购:
ProductModel.objects.filter(
sponsored_member_product__product_id=self.request.parser_context['kwargs']['pk']
).order_by('sponsored_member_product__position')
因此,这将通过遵循关系(中的)按相关模型过滤和排序对象。sponsored_member_product
related_name
ForeignKey
注意:型号通常没有
Model
后缀。因此,最好重命名为ProductModel
Product
.
推荐阅读
- ios - Xcode 不会在项目中打开 swift 文件,文件图标是灰色的(低 alpha),从远程下载克隆后
- jquery - 在页脚之前使固定位置 Div 停止
- java - 使用 JAVA 从 .csv 文件中删除项目
- android - 关于图像随机的问题
- c# - 我是否在结构比较中使用 IEquatable Equals()?
- xcode - 错误:统一到xcode;架构 arm64 的未定义符号:
- google-apps-script - 如何通过应用程序脚本从谷歌表中获取特定范围的行数据
- firebase - 存储达到一定限制时触发firebase云功能
- c# - 从 Azure 表存储中检索记录抛出未设置对象引用
- node.js - 使用 Node.js 而不使用 mongoose 的 MongoDB(Atlas)连接