我的班级有两节课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(使用前将#替换为@)