在Django中,最好从self获取对象列表并使用相关名称或从对象本身获取并使用过滤器?

hob*_*es3 0 python django django-models django-queryset

标题可能令人困惑,但我不知道如何解释它.这是一个例子.

做这样的事情会更好吗?

class UserType( models.Model ) :
    def user_count( self ) :
        return self.userprofile_set.count()
Run Code Online (Sandbox Code Playgroud)

或者像这样?

class UserType( models.Model ) :
    def user_count( self ) :
        # Does "user_types = self" work? I'm not sure.
        return UserProfile.filter( user_types = self.pk ).count()
Run Code Online (Sandbox Code Playgroud)

哪里

class UserProfile( models.Model ) :
    user_types = models.ManyToManyField( UserType )
Run Code Online (Sandbox Code Playgroud)

UserType.user_count()只返回UserProfile具有特定人物的人数UserType.

对不起,如果这是一个愚蠢,微不足道的问题,但我很好奇.也许一些Django专家可以深入研究实际的SQL性能或东西:-).

Dim*_*din 6

他们是一样的.选择你喜欢的任何东西

在我看来,第一个看起来更清洁.第二个似乎有点不正确,因为user_types不是单个pk值.

顺便说一下,建议始终指定related_name属性.

例如,如果它是:

user_types = models.ManyToManyField(UserType, related_name='profiles')
Run Code Online (Sandbox Code Playgroud)

然后:

return self.profiles.count()
Run Code Online (Sandbox Code Playgroud)

看起来更干净.

但是这两个语句生成相同的sql,我们只能说第一个是第二个快捷方式.所以这不是关于sql-performance