Django 按类别获取喜欢的数量
Django get number of of likes group by category
我的模型结构如下
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(
<b>nlinkes=Count('pk')</b>
).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
)。
我的模型结构如下
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(
<b>nlinkes=Count('pk')</b>
).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
)。