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

两者本质上是一样的。当您执行 M2M 时,Django 会自动创建一个中间模型,这与您的模型非常相似GroupMember。但是,它还设置了一些 API 挂钩,允许您Group直接从UserProfile模型访问模型,而不必弄乱中间模型。

您可以使用through@San4ez 解释的方式添加相同的钩子,但您只会让事情变得更复杂。创建自定义through仅当您需要向关系添加其他字段时,否则,坚持使用默认值。

总而言之,#1 更好,只是因为它与 #2 完全相同,但更简单,没有多余的代码。

于 2012-05-25T14:24:46.447 回答
1

您还可以使用through选项组合这两种变体

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

你是什​​么意思better?通常您不需要创建中间模型(必须存储额外数据的情况除外)。

ManyToManyField他的工作做得很完美,所以不要自己写它的功能。

于 2012-05-25T06:18:19.507 回答