Django模型:使用多个值作为关键?

Nic*_*ner 1 python database django models

这是一个简单的模型:

class TakingCourse(models.Model):
    course = models.ForeignKey(Course)
    term = models.ForeignKey(Term)
Run Code Online (Sandbox Code Playgroud)

取而代之的Django的创建默认主键,我想同时使用course,并term作为主键-结合在一起,他们唯一标识一个元组.这是Django允许的吗?

在相关的说明:我试图代表用户以某些方式参加课程.有一个更好的方法吗?

class Course(models.Model):
    name = models.CharField(max_length=200)
    requiredFor = models.ManyToManyField(RequirementSubSet, blank=True)
    offeringSchool = models.ForeignKey(School)

    def __unicode__(self):
        return "%s at %s" % (self.name, self.offeringSchool)

class MyUser(models.Model):
    user = models.ForeignKey(User, unique=True)
    takingReqSets = models.ManyToManyField(RequirementSet, blank=True)
    takingTerms = models.ManyToManyField(Term, blank=True)
    takingCourses = models.ManyToManyField(TakingCourse, blank=True)
    school = models.ForeignKey(School)

class TakingCourse(models.Model):
    course = models.ForeignKey(Course)
    term = models.ForeignKey(Term)

class Term(models.Model):
    school = models.ForeignKey(School)
    isPrimaryTerm = models.BooleanField()
Run Code Online (Sandbox Code Playgroud)

jbo*_*chi 5

您可以使用unique_together选项.

class TakingCourse(models.Model):
    course = models.ForeignKey(Course)
    term = models.ForeignKey(Term)

    class Meta:
        unique_together = ('course', 'term')
Run Code Online (Sandbox Code Playgroud)

不过,如果你做这样的事情会更好:

class MyUser(models.Model):
    user = models.OneToOneField(User)
    takingReqSets = models.ManyToManyField(RequirementSet, blank=True)
    takingCourses = models.ManyToManyField(Course, through='TakingCourse', blank=True, null=True)
    school = models.ForeignKey(School)

class TakingCourse(models.Model):
    my_user = models.ForeignKey(MyUser)
    course = models.ForeignKey(Course)
    term = models.ForeignKey(Term)

    class Meta:
         unique_together = ('my_user', 'course')
Run Code Online (Sandbox Code Playgroud)

阅读关于多对多关系的一对一关系额外字段.