首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >django很多很多order_by关系的数量

django很多很多order_by关系的数量
EN

Stack Overflow用户
提问于 2017-12-20 12:40:14
回答 2查看 533关注 0票数 2

我与Products和Tags有很多关系,我想找到与我的标签集最匹配的产品。

代码语言:javascript
复制
class Product(models.Model):
    def __str__(self):
        return self.title
    title = models.CharField(max_length=200)
    price = models.IntegerField()
    tags = models.ManyToManyField(Tag, related_name="products", blank=True)

class Tag(models.Model):
    def __str__(self):
        return self.name
    name = models.CharField(max_length=50)

我有一个tag查询集,我想按哪个产品具有最多的选定标签来排序我的产品?

做这件事有什么巧妙的技巧吗?或者我必须查询所有的产品,然后自己对它们进行排序?

例如,如果我有一个包含3个标记的QuerySet:STEMProgrammingK-6

我有很多产品:

代码语言:javascript
复制
Computer Science Book (Programming),
Engineering Puzzle (K-6, STEM),
Cookie Cutters (K-6),
Rocket (STEM, K-6, Programming),
Backpack (K-6)

我想退回这些相同的商品,但顺序如下:

代码语言:javascript
复制
Rocket (STEM, K-6, Programming),
Engineering Puzzle (K-6, STEM),
Computer Science Book (Programming),
Cookie Cutters (K-6),
Backpack (K-6)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-12-20 15:21:16

如果您希望根据“多”关系(ManyToMany或ForeignKey)计数对查询集进行排序,请执行以下操作。

代码语言:javascript
复制
from django.db.models import Count

# assume 'selected_tags' contains tags to be filtered
ordered_products = Product.objects.filter(tags__in=selected_tags).annotate(num_tags=Count('tags')).order_by('-num_tags')
票数 1
EN

Stack Overflow用户

发布于 2017-12-20 13:18:27

没有办法做到这一点,只有一种办法可以做到这一点。获取所有产品。

代码语言:javascript
复制
d = {}
products = Product.objects.all()
for a in products:
    tags = a.tags.values_list('name', flat=True)
    d[a.name] = tags

for k in sorted(d, key=lambda k: len(d[k]), reverse=True):
    print k , d[k]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47898886

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档