通过过滤的子对象对查询集进行排序

时间:2017-04-10 17:30:06

标签: python django postgresql django-queryset

我有以下(简化)数据模型,请参阅帖子下方的可视化表示:

  • 具有属性的文章
  • 属性通过PK引用类型,其具有字段代码
  • 属性具有字段值
  • 该值指的是另一个名为Record的模型中的字段uuid,它还有一个字段sorting_code

我现在想要使用分页以特定顺序返回文章列表。我正在使用默认的ViewSet。分页迫使我在数据库中进行排序,而不是稍后在Python中进行排序。但是,我似乎无法找到订购这些文章的正确ordering子句。我需要做的是:

  • 获取具有特定类型的属性
  • 在“记录表”
  • 中查找这些属性中的值
  • 根据sorting_code
  • 订购商品

以下SQL查询完成了这项工作(适用于所有文章):

SELECT art.order_id, art.uuid, att.value, mdr.code, mdr.name, mdr.sorting_code
FROM ow_order_article art
INNER JOIN ow_order_attribute att ON att.article_id = art.uuid
INNER JOIN ow_masterdata_type mdt ON att.masterdata_type_id = mdt.uuid
INNER JOIN ow_masterdata_record mdr ON att.value = mdr.uuid
WHERE mdt.code = 'article_structure'
ORDER BY mdr.sorting_code, mdr.code

在Django的查询集中获取此排序的正确方法是什么?

Data model simplified

0 个答案:

没有答案