Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何删除Django中自动生成的多个表中的冗余ID字段?_Django_Django Models_Many To Many - Fatal编程技术网

如何删除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字段看起来不太好。无论如何,因为它不影响应用程序逻辑,我可以接受:)