以下哪种结构更可取:
# 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)
哪个更好?
答案 0 :(得分:1)
您还可以使用through选项
组合这两种变体groups = models.ManyToManyField(Group, through='GroupMember')
better
你是什么意思?通常您不需要创建中间模型(除非您必须存储extra data)。
ManyToManyField
完美地完成了他的工作,所以不要自己编写它的功能。
答案 1 :(得分:1)
两者基本相同。当您执行M2M时,Django会自动创建一个中间模型,它与您的GroupMember
模型完全相同 。但是,它还设置了一些API挂钩,允许您直接从Group
模型访问UserProfile
模型,而不必混淆中间模型。
@ San4ez解释说,你可以使用through
添加相同的钩子,但你只是让事情变得更复杂。只有在需要向关系中添加其他字段时,才能创建自定义through
模型。否则,坚持使用默认值。
长而短,#1更好,只是因为它与#2完全相同,但更简单,没有多余的代码。