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 値ではないため、2 番目は少し正しくないようです。

ちなみに、常にrelated_name属性を指定することをお勧めします。

たとえば、次のようになります。

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

その後:

return self.profiles.count()

さらにすっきり見えます。

しかし、どちらのステートメントも同じ sql を生成します。最初は 2 番目のショートカットであると言えます。したがって、SQLパフォーマンスについてではありません

于 2012-04-12T17:07:59.863 に答える