Django模型定义种族

时间:2012-12-27 00:55:23

标签: django

如何处理依赖模型(B)定义的模型(A)的情况,但模型(B)也依赖于定义的模型(A)。

例如,我有

class event(models.Model):
    competition_start = models.DateField() 
    competitors = models.ManyToManyField(picture)
    results = models.CommaSeparatedIntegerField(max_length=20)

class picture(models.Model):
    uploader = models.OneToOneField(UserProfile)
    upload_date = models.DateField()
    image = models.ImageField(upload_to="media")
    score = models.DecimalField(max_digits=10,decimal_places=10)
    score_RD = models.DecimalField(max_digits=10,decimal_places=10)
    rated = models.BooleanField()
    last_competed = models.DateField() 
    competition = models.OneToOneField(event) 

竞争对手的领域依赖于定义的图片,但图片依赖于定义的事件。

请注意,每张图片(A)与一个事件共享一对一的关系,但该事件可能涉及多个其他图片(设置(S)-A)。

我尝试交换

competitors = models.ManyToManyField(picture) 
user_pic = models.OneToOneField(picture)

在事件内部并摆脱了“竞争”领域,但我相信SQL不允许这样做。有人可以解释原因吗?

如果我需要一个字段的OneToOne关系,我应该执行什么修复 与另一个人的许多关系? (在两个相同的班级之间)

谢谢:)

2 个答案:

答案 0 :(得分:2)

您可以将类名称的字符串传递给OneToOneForeignKey的定义,并将其评估为“懒惰”。

competitors = models.ManyToManyField('picture')

此外,模型类名称的约定是驼峰式(例如'picture'=>'Picture','event'=>'Event')。

答案 1 :(得分:1)

class event(models.Model):
  competition_start = models.DateField() 
  competitors = models.ManyToManyField('MODULE.picture')
  results = models.CommaSeparatedIntegerField(max_length=20)
  ...

此外,根据定义,您不能同时拥有一对一和多对多。我想你希望Picture类上的关系是一个外键而不是一对一。