簡潔な質問: Django (1.5) で、 throughパラメータ
を使用せずに外部テーブルで多対多の関係をモデル化することの利点と欠点は何ですか?
詳細:
カスタム User モデルUserProfileがあり、同じモデルに対して m2m リレーションを定義したいとします。たとえば、次のリレーションを実装します。次のように外部テーブル (モデル) を定義できます。
class Relationship(models.Model):
"""Relationship model"""
from_user = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='from_users')
to_user = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='to_users')
created = models.DateTimeField(auto_now_add=True)
is_blocked = models.BooleanField(default=False)
objects = RelationshipManager()
この場合、以下に示すように UserProfile モデルに m2m フィールドを追加する必要がありますか? はいの場合、なぜですか? Relationshipモデルだけを使用して、ユーザー間のすべての関係を処理できましたね。
class UserProfile(AbstractBaseUser, PermissionsMixin):
user_following = models.ManyToManyField('self', through=Relationship, symmetrical=False, related_name='followed')