如何处理依赖模型(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关系,我应该执行什么修复 与另一个人的许多关系? (在两个相同的班级之间)
谢谢:)
答案 0 :(得分:2)
您可以将类名称的字符串传递给OneToOne
和ForeignKey
的定义,并将其评估为“懒惰”。
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类上的关系是一个外键而不是一对一。