django按发生次数排序查询结果

dan*_*ndu 4 sorting django

我有两个流动的模型:

class Item(models.Model):
    Name = models.CharField(max_length = 32)

class Profile(models.Model):
    user = models.ForeignKey(User, unique = True)

    ItemList = models.ManyToManyField(Item, related_name = "user_itemlist")
Run Code Online (Sandbox Code Playgroud)

对于项目XI,要获取ItemList中存在的Item对象列表,以查找ItemList中包含X的所有Profile对象,并按每个对象出现的次数排序.

到目前为止,我能做的最好的事情是:

Item.objects.filter(user_itemlist__in = User.objects.filter(profile__ItemList = X))
Run Code Online (Sandbox Code Playgroud)

这将返回我需要的所有Item对象的列表,带有重复项(如果ItemList中的Item Z出现在10个Profile对象中,它将在查询结果中出现10次).

如何按照每个对象在结果中出现的次数对上述查询的结果进行排序并删除重复项?有没有"django"的方式来做到这一点?

dan*_*ndu 7

profiles = Profile.objects.filter(profile__ItemList=X)

Item.objects.filter(
    user_itemlist__in=profiles
).annotate(itemcount=Count('id')).order_by('-itemcount')
Run Code Online (Sandbox Code Playgroud)