我有这样一个数据模型:
class Post(models.Model)
name = models.CharField(max_length=255)
class Tag(models.Model)
name = models.CharField(max_length=255)
rating = models.FloatField(max_length=255)
parent = models.ForeignKey(Post, related_name="tags")
我想得到有标签的帖子,并按标签评级排序。在
比如: Posts.objects.filter(tags_uname=“exampletag”)。order_by(“tags(name=exampletag)u rating”)
目前,我认为做一些类似的事情是有意义的
^{pr2}$但我想知道是否有更好的方法,最好是查询Post,并返回一个queryset。在
我不认为这是:(编辑2-这个没有给出正确的排序!)
Posts.objects.filter(tags__name="exampletag").order_by("tags__rating")
将给出正确的排序,因为它不仅按名为“exampletag”的相关项进行排序
需要类似以下内容
Posts.objects.filter(tags__name="exampletag").order_by("tags(name=exampletag)__rating")
我已经看过了django文档,它似乎“annotate”几乎是起作用了,但我看不出一种方法可以使用它来按名称选择标记。在
两个答案都是正确的!请看我的评论来观察一些史诗般的大脑放屁(一个测试,结果井然有序,另一个我根据不同的标签过滤和排序!)在
质询
Posts.objects.filter(tags__name="exampletag").order_by("tags__rating")
以及
Posts.objects.filter(tags__name="exampletag").filter(tags__name="someothertag").order_by("tags__rating")
将正常工作,并按“exampletag”分级排序
调用order_by时用于排序的标记(来自ForeignKey BackReference集)似乎是first过滤器中的标记。在
甚至比Anush还短,使用连接而不是子查询:
你可以这样做:
相关问题 更多 >
编程相关推荐