【问题标题】:Django, getting related objects in a loop of objectsDjango,在对象循环中获取相关对象
【发布时间】:2013-08-18 08:39:08
【问题描述】:

假设用户可以列出Types。当他们添加到类型列表中时,会创建一个新的 UserType 对象,其中用户和类型为 ForeignKeys

其他用户可以“喜欢”用户列出的各个类型 (UserTypes)。

鉴于我查询用户的UserTypes,我怎样才能最好地获取 QuerySet 中每个 UserType 上的 UserLikes 的数量以在模板中使用?我会简单地遍历,查询每个并将结果作为单独的列表返回吗?这看起来很混乱。

class Type(model.Models):
    name = models.CharField(max_length=100, blank=False)
    description = models.TextField(max_length=1000, blank=True)
    created_by = models.ForeignKey(User, blank=True, null=True, unique=False)


class UserType(model.Models):
    user = models.ForeignKey(User, unique=False)
    type = models.ForeignKey(Type, unique=False)
    is_active = models.BooleanField(default=True)


class UserLike(model.Models):
    user = models.ForeignKey(User, unique=False)
    user_type = models.ForeignKey(UserType, unique=False)

【问题讨论】:

    标签: python django django-models django-queryset


    【解决方案1】:

    对 UserType 实例的 UserLike 集进行简单计数如何:

    some_user_type = UserType.objects.get(user_id=some_user_pk)
    like_count = some_user_type.userlike_set.all().count()
    

    或者如果您在查询集中有一堆用户类型,您可以使用annotate:

    from django.db.models import Count
    qs = UserType.objects.annotate(Count('userlike'))
    

    现在查询集中的每个结果都有计数:qs[0].userlike__count

    【讨论】:

    • 这将返回一个属于该用户的 UserType 并计算其上的点赞数。我正在尝试获取所有 UserLikes 给定的 UserTypes QuerySet 以在我的模板中使用。
    • 好的,我认为你应该注释查询集...我已经编辑了我的答案
    • 哇,不知道这存在。看了几个例子,我对它的工作原理更加困惑,非常惊讶。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-14
    • 1970-01-01
    • 2016-09-28
    • 2013-10-20
    • 1970-01-01
    • 2018-03-29
    相关资源
    最近更新 更多