标题可能令人困惑,但我不知道如何解释它。这是一个例子。
做这样的事情会更好吗
class UserType( models.Model ) :
def user_count( self ) :
return self.userprofile_set.count()
还是喜欢这个?
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()
,其中
class UserProfile( models.Model ) :
user_types = models.ManyToManyField( UserType )
UserType.user_count()
只返回具有特定UserProfile
的{{1}}个。
对不起,如果这是一个愚蠢而微不足道的问题,但我很好奇。也许一些Django专家可以深入研究实际的SQL性能或其他东西: - )。
答案 0 :(得分:6)
他们是一样的。选择你喜欢的任何东西。
在我看来,第一个看起来更干净。第二个似乎有点不正确,因为user_types不是单个pk值。
顺便说一下,建议始终指定related_name属性。
例如,如果是:
user_types = models.ManyToManyField(UserType, related_name='profiles')
然后:
return self.profiles.count()
看起来更干净。
但两个语句都生成相同的sql,我们只能说第一个是第二个快捷方式。所以这不是关于sql-performance