所以在Django模型文档中,当我需要向manymany字段添加额外的数据时,Django文档建议我使用'through',就像这个例子
class Person(models.Model):
name = models.CharField(max_length=128)
def __str__(self):
return self.name
class Group(models.Model):
name = models.CharField(max_length=128)
members = models.ManyToManyField(Person, through='Membership')
def __str__(self):
return self.name
class Membership(models.Model):
person = models.ForeignKey(Person, on_delete=models.CASCADE)
group = models.ForeignKey(Group, on_delete=models.CASCADE)
date_joined = models.DateField()
invite_reason = models.CharField(max_length=64)
在管理面板,这是很好的,但当我试图使用它的视图。py创建API时,我得到了很多问题,我不能从组模型
获得成员字段信息但是当我创建这样的模型时,它变得可能:
class Person(models.Model):
name = models.CharField(max_length=128)
def __str__(self):
return self.name
class Group(models.Model):
name = models.CharField(max_length=128)
members = models.ManyToManyField('Membership')
def __str__(self):
return self.name
class Membership(models.Model):
person = models.ForeignKey(Person, on_delete=models.CASCADE)
date_joined = models.DateField()
invite_reason = models.CharField(max_length=64)
不遵循文档让我觉得我做错了
因为我是初学者,我不知道我的方法是好还是不好?创建这样一个模型不好吗?如果我应该回到使用"通过",那么是否有可能从组模型中获得会员字段?
即使你省略了M2M字段的through
参数,Django仍然会创建第三个表来保存特定的Person
和Group
记录之间的关系。
没有好坏之分,只取决于你的要求。如果你不需要额外的成员信息——你可以避免自己创建中间表(model),让Django在后台创建这个表,但如果你需要额外的成员字段:因为我是初学者,我不知道我的方法是好还是不好?创建这样一个模型不好吗?
是否有可能从组模型中获取成员字段
,您应该自己创建包含所需字段的中间表
您也可以阅读这篇文章来更好地了解M2M的使用。