1

阅读有关多对多关系的 Django 文档,当您需要在中间表上添加一个额外字段时,我不清楚通过将关系定义为多对多而不是仅使用中间的外键来获得什么在您的每个模型中创建模型。

例如,在此处的示例中:https ://docs.djangoproject.com/en/dev/topics/db/models/#intermediary-manytomany

为什么要打扰 ManyToManyField 行?它是否允许您以不同的方式提及这种关系?它会改变管理员中的某些内容吗?

4

1 回答 1

1

为什么要打扰ManyToManyField line:M2M 字段是 django fields,它对许多模型字段接口很有用,例如ModelAdminor ModelForm(声明字段,不包括默认小部件)。它还生成辅助方法,例如易于访问 m2m 管理器和在管理员中自动保存 m2m。

这是该字段自动为管理面板执行的操作的一个快速示例:如果不先保存主对象,您将无法保存直通模型。save_m2m管理员在主对象自动保存后处理此行为。如果您不使用 m2m 字段,则必须自己编写这种逻辑。

我认为当您的项目使用 m2m 字段时您会使用此字段,但您只需要少量的附加信息。这样您的代码实际上与典型的 m2m 关系相同,但是当您需要它时,您可以查询额外的信息。

否则,仅添加“date_added”字段将需要编写管理小部件、save_model 挂钩、ModelForm 表示等。

您是对的,尽管使用 through 模型删除 m2m 行不会对数据库进行任何更改,并且您最终可以用默认的 ForeignKey 反向管理器替换 m2mfield 功能而不会造成太大伤害。

model.m2m_through_set.all() # this would work
model.m2m_through_set.create(target=target_instance)
于 2012-04-23T23:31:47.293 回答