【问题标题】:How to get query rows sorted by number of matched properties?如何获取按匹配属性数排序的查询行?
【发布时间】:2017-08-12 20:43:06
【问题描述】:

我有两个模型/表 APropertyAProperty 具有多对多关系。 A 有一个字段SomeNameProperty 也有一个字段Value

通过我的应用程序,我收到了Values 的列表。现在,我想从已发送列表中检索至少有一个ValueA 行,但我还想根据列表中Properties 的数量对这些行进行排序。

例如,M、N 和 O 是模型 A 的三个对象。M 具有 P1、P2、P3 的属性,N 具有 P2、P3、P4 的属性,O 具有 P3 的属性。我收到值 P2、P4 的列表。现在,如果 SomeName 是模型 A 的字符串表示,我想要的结果查询集是 <QuerySet [<A: N>, <A: M>]>

Django 代码是首选,但 SQL 也足够了。

【问题讨论】:

  • 你尝试了什么?
  • @arie 无法解决它。我认为这不值得投反对票。
  • @RahulSarma 希望我能帮上忙。 :)
  • @RahulSarma - 你能提供你的桌子的结构吗?
  • @RamMehta 我已经在上面做了。 A 表具有 SomeName 列,而 Property 表具有 Value 列。当然,对于多对多的关系,会有一个中间表,不过如果你用的是django就不用提了。

标签: mysql sql django django-queryset


【解决方案1】:

感觉就像你需要的。假设A 是模型,ValuesProperties 中的字段。同样M2MFieldMany2Many 字段从AProperty

A.objects.filter(M2MField__Values__in=[list that you have]).annotate(c=Count('M2MField')).order_by('c') #-c for descending order.

【讨论】:

  • 太棒了。那行得通。只是也许编辑它以包含from django.db.models import Count
  • 嗨,我再次使答案不被接受,因为在您的结果中,您正在计算属性对象 A 的总数并对查询集进行排序,而我想根据数量对查询集进行排序属性对象A 存在于用户提交的列表中。如果你可以编辑你的答案,我会恢复状态。
猜你喜欢
  • 1970-01-01
  • 2015-09-13
  • 1970-01-01
  • 2022-11-22
  • 2014-09-30
  • 2015-08-13
  • 1970-01-01
  • 2018-03-08
  • 1970-01-01
相关资源
最近更新 更多