我的模型结构如下
from django.db import models
class ArticleCategory(models.Model):
name = models.CharField(('Name'), max_length=255)
class Article(models.Model):
category = models.ForeignKey('articles.ArticleCategory', null=True,
blank=True, related_name='articles', on_delete=models.SET_NULL)
class ArticleLike(DateBaseModel):
user = models.ForeignKey(settings.AUTH_USER_MODEL,on_delete=models.CASCADE, related_name='user_likes')
article = models.ForeignKey('articles.Article', on_delete=models.CASCADE, related_name='article_likes')
我有如下查询
from django.contrib.auth import get_user_model
User = get_user_model()
condition = """
SELECT (
SELECT COUNT(articles_articlelike.id) FROM articles_articlelike
WHERE articles_articlelike.user_id = account_account.id
) AS "likes_count", "account_account"."id" FROM "account_account"
"""
users = User.objects.raw(condition)
这给了我带有喜欢计数的用户的查询集。现在,我想做的就是将最喜欢的类别添加到该查询中。这是为了向管理员显示用户最喜欢的类别。我如何创建这样的查询?
最佳答案
请不要进行原始查询。它通常是不安全的,而且还不稳定:如果以后更改数据库列的名称,则需要重写各种查询。
您可以通过以下方式实现此类查询:
from django.db.models import Count, F
ArticleLike.objects.values(
'user_id'
category_id=F('article__category_id')
).annotate(
nlinkes=Count('pk')
).order_by('user_id', 'category_id')
这将生成一个查询集,如下所示:
<QuerySet [
{ 'user_id': 14, 'category_id': 25, 'nlinkes': 16 },
{ 'user_id': 14, 'category_id': 36, 'nlinkes': 3 },
{ 'user_id': 21, 'category_id': 7, 'nlinkes': 4 }
]>
因此,词典中的
QuerySet
包含user_id
,category_id
和点赞次数(nlikes
)。关于python - Django按类别获取喜欢的组数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59530395/