django OneToOne反向访问

Win*_*ker 37 database django one-to-one

我有这些简单的课程

Class A(models.Model):
    ...

Class Meta(models.Model):
    a = models.OnetoOneField(A, primary_key=True)
    width = models.IntegerField(default=100)
Run Code Online (Sandbox Code Playgroud)

但是当我这样做的时候

a = A()
meta = Meta()
a.save()
meta.a = a
meta.save()
print a.meta.width
Run Code Online (Sandbox Code Playgroud)

我明白了

'A' object has no attribute 'meta'
Run Code Online (Sandbox Code Playgroud)

为什么是这样?我使用OneToOne错了吗?如果是这样,我怎么能得到正确的印刷声明?

谢谢

Yuj*_*ita 56

定义a related_name以调用反向访问器.

a = models.OneToOneField(A, related_name='foobar')
# ...
a.foobar 
Run Code Online (Sandbox Code Playgroud)

  • 在没有related_name的情况下,您可以使用a.meta而不是a.foobar.但绝对不要称模型'Meta'. (12认同)
  • 值得一提的是,如果您不使用“related_name”,请使用所有字母小写的模型名称。例如,如果你有 ExtraModel 而不是 Meta,你应该像这样访问它:`a.extramodel`。 (5认同)