如何删除 Django 自动生成的 ManyToMany 表中的冗余 ID 字段?

2024-03-03

我的班级有两节课models.py file:

class Person:
    person_name = models.CharField(max_length = 50)

class Course:
    course_name = models.CharField(max_length = 50)
    course_person = models.ManyToManyField(Person)

在我修改后的示例中,一个人选修多门课程,而一门课程由多人选修,因此是ManyToMany。

当我让 Django 自动生成我的表时,我得到了一个额外的ID场地。 我想要自动生成的person_course多对多表由两个复合键组成person_id and course_id only. Note:这两个字段都是自动生成、自动递增的字段。

我还尝试定义我的 ManyToMany 类并尝试使用关键字链接字段through=,但这并没有帮助。

我已经问过谷歌但没有太多帮助。你们中的许多天才可以提供一些提示:)


目前姜戈默认不支持复合主键 https://code.djangoproject.com/wiki/MultipleColumnPrimaryKeys#Multi-ColumnPrimaryKeysupport

你可以做的是保留自动生成的id作为(代理)主键,然后定义一个unique_together https://docs.djangoproject.com/en/dev/ref/models/options/#unique-together中的关系through table.

class Meta:
    unique_together = (course, person)

这样,您可以保证 through 表中的条目是唯一的,并且当您引用id它相当于引用唯一的(course, person)无论如何,这就是我们想要的。

有一些第三方应用程序 https://django-composite-field.readthedocs.org/en/latest/#compositefield如果您愿意,可以实现此功能。但是,除非绝对必要(例如遗留系统支持),否则我只会保持简单并实现unique_together.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何删除 Django 自动生成的 ManyToMany 表中的冗余 ID 字段? 的相关文章

随机推荐