0

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

做这样的事情会更好吗

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拥有特定UserType.

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

4

1 回答 1

6

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

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

顺便说一句,建议始终指定一个related_name属性。

例如,如果它是:

user_types = models.ManyToManyField(UserType, related_name='profiles')

进而:

return self.profiles.count()

看起来更干净了。

但是两条语句生成的sql是一样的,我们只能说first是second的快捷方式。所以这与 sql 性能无关

于 2012-04-12T17:07:59.863 回答