我的模型结构如下

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_idcategory_id和点赞次数(nlikes)。

关于python - Django按类别获取喜欢的组数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59530395/

10-12 20:14