这是一个简单的模型:
class TakingCourse(models.Model):
course = models.ForeignKey(Course)
term = models.ForeignKey(Term)
我不想使用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()
答案 0 :(得分:5)
您可以使用unique_together选项。
class TakingCourse(models.Model):
course = models.ForeignKey(Course)
term = models.ForeignKey(Term)
class Meta:
unique_together = ('course', 'term')
如果你做这样的事情会更好:
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')
了解one to one relationships和extra fields on many to many relationships。