0

您如何处理模型 (A) 依赖于定义的模型 (B),但模型 (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 关系和另一个字段的 ManyToMany 关系,我应该执行什么修复?(在两个相同的班级之间)

谢谢 :)

4

2 回答 2

2

您可以将类名的字符串传递给定义OneToOneForeignKey让它“懒惰地”评估。

competitors = models.ManyToManyField('picture')

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

于 2012-12-27T00:58:23.017 回答
1
class event(models.Model):
  competition_start = models.DateField() 
  competitors = models.ManyToManyField('MODULE.picture')
  results = models.CommaSeparatedIntegerField(max_length=20)
  ...

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

于 2012-12-27T00:59:11.973 回答