我的models.py
文件中有两个类:
class Person:
person_name = models.CharField(max_length = 50)
class Course:
course_name = models.CharField(max_length = 50)
course_person = models.ManyToManyField(Person)
在我修改过的例子中,一个人参加了很多课程,一门课程被许多人带走,因此很多人都可以参加。
当我让Django自动生成我的表时,我得到一个额外的ID
字段。
我希望自动生成的person_course
manytomany表仅包含两个复合键person_id
和course_id
。 注意:它们都是自动生成的,自动递增的字段。
我还尝试定义我的ManyToMany类,并尝试使用关键字through=
链接字段,但这没有帮助。
我问谷歌但没有多少帮助。你们中的许多天才可以提供一些暗示:)
答案 0 :(得分:6)
Django目前does not support composite primary key by default
您可以做的是将自动生成的id
保留为(代理)主键,然后在through
表中定义unique_together
关系。
class Meta:
unique_together = (course, person)
这样,您可以保证直通表中的唯一条目,当您引用id
时,它相当于引用我们想要的唯一(course, person)
。
如果您愿意,有一些third party apps可以实现此功能。但是,除非绝对必要(如遗留系统支持),否则我会保持简单并实现unique_together
。