如何删除Django中自动生成的多个表中的冗余ID字段?
我的如何删除Django中自动生成的多个表中的冗余ID字段?,django,django-models,many-to-many,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) 在我修改过的示例中,一个人修了很多课程,而一门课程被很多人修了,因此很多人都修了 当我让D
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\u-course
manytomy表仅由两个组合键person\u-id
和course\u-id
组成。注意:这两个字段都是自动生成、自动递增的字段
我还尝试定义我的ManyToMany类,并尝试使用关键字通过=
链接字段,但没有帮助
我问过谷歌,但没有得到多少帮助。你们当中的许多天才都可以提供一些提示:)Django
相反,您可以将自动生成的id
保留为(代理)主键,然后通过表在中定义关系
class Meta:
unique_together = (course, person)
这样,您可以保证到表中的条目是唯一的,并且当您引用id
时,它相当于引用唯一的(当然,个人)
,这正是我们想要的
如果您需要,可以使用一些工具来实现此功能。然而,除非是绝对必要的(如遗留系统支持),否则我只会保持简单并一起实现unique\u
来自django.db导入模型的
班级负责人(models.Model):
衬衫尺寸=(
(‘S’、‘Small’),
(‘M’、‘中’),
('L','Large'),
)
name=models.CharField(最大长度=60)
衬衫尺寸=型号.CharField(最大长度=1,选项=衬衫尺寸)
感谢您的输入。恩,Django的限制是不能这样做。Django试图让生活变得轻松。我过去常常从头开始设计数据库,以便在我的应用程序中使用,我不太高兴Django尝试自己做所有事情。至少,我对某些事情没有太多的控制权,比如不创建冗余ID字段。我使用MySQL workbench直观地描述我的数据库,这个额外的ID字段看起来不太好。无论如何,因为它不影响应用程序逻辑,我可以接受:)