0

次の構造のどれが好ましいでしょう:

# M2M
class UserProfile(models.Model):
    ...
    groups = models.ManyToManyField(Group)

class Group(models.Model):
    ...

また -

# 2 FKs
class UserProfile(models.Model):
    ...

class Group(models.Models):
    ...

class GroupMember(models.Model):
    user = models.ForeignKey(UserProfile)
    group = models.ForeignKey(Group)

どちらが良いでしょうか?

4

2 に答える 2

1

スルーオプションを使用して、これら2つのバリアントを組み合わせることもできます

groups = models.ManyToManyField(Group, through='GroupMember')

どういう意味betterですか?通常、中間モデルを作成する必要はありません(追加のデータを保存する必要がある場合を除く)。

ManyToManyField彼の仕事は完璧ですので、自分でその機能を書かないでください。

于 2012-05-25T06:18:19.507 に答える
1

2つは本質的に同じです。M2Mを実行すると、Djangoは自動的に中間モデルを作成します。これはモデルとほとんど同じGroupMemberです。ただし、いくつかのAPIフックも設定されているため、中間モデルをいじることなくGroup、モデルから直接モデルにアクセスできます。UserProfile

through@ San4ezが説明しているように、を使用して同じフックを追加し直すことができますが、それは物事をより複雑にしているだけです。カスタムthroughモデルの作成は、リレーションシップにフィールドを追加する必要がある場合にのみ役立ちます。それ以外の場合は、デフォルトのままにします。

長くても短くても、#1の方が優れています。これは、#2とまったく同じであるが、単純で、余分なコードがないためです。

于 2012-05-25T14:24:46.447 に答える