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

时间:2013-06-28 13:30:20

标签: django django-models many-to-many

我的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_idcourse_id注意:它们都是自动生成的,自动递增的字段。

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

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

1 个答案:

答案 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