5

我的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字段。我希望自动生成的manytomanyperson_course表仅包含两个复合键。注意:它们都是自动生成的、自动递增的字段。person_idcourse_id

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

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

4

2 回答 2

6

Django 目前默认不支持复合主键

您可以做的是将自动生成的保留id为(代理)主键,然后在表中定义unique_together关系。through

class Meta:
    unique_together = (course, person)

这样,您可以保证通过表中的唯一条目,并且当您引用id它时,它相当于引用(course, person)我们想要的唯一条目。

如果您愿意,有一些第三方应用程序可以实现此功能。但是,除非绝对必要(如遗留系统支持),否则我只会保持简单并实现unique_together.

于 2013-06-28T13:55:28.677 回答
0
from django.db import models

class Person(models.Model):
    SHIRT_SIZES = (
        ('S', 'Small'),
        ('M', 'Medium'),
        ('L', 'Large'),
    )
    name = models.CharField(max_length=60)
    shirt_size = models.CharField(max_length=1, choices=SHIRT_SIZES)
于 2021-05-22T21:48:55.513 回答