【问题标题】:django OneToOne reverse accessdjango OneToOne 反向访问
【发布时间】:2012-06-20 18:43:23
【问题描述】:

我有这些简单的类

Class A(models.Model):
    ...

Class Meta(models.Model):
    a = models.OnetoOneField(A, primary_key=True)
    width = models.IntegerField(default=100)

但是当我这样做时

a = A()
meta = Meta()
a.save()
meta.a = a
meta.save()
print a.meta.width

我明白了

'A' object has no attribute 'meta'

这是为什么?我使用 OneToOne 错了吗?如果是这样,我怎样才能得到正确的打印语句?

谢谢

【问题讨论】:

  • 不要使用元。它已经在 Django 的其他地方使用。
  • 是的,Meta 的使用非常令人困惑。您还使用 Meta.a 和 a=A() 这增加了混乱

标签: database django one-to-one


【解决方案1】:

定义一个related_name 来调用反向访问器。

a = models.OneToOneField(A, related_name='foobar')
# ...
a.foobar 

【讨论】:

  • 如果没有相关名称,您可以使用 a.meta 而不是 a.foobar。但绝对不要称模型为“Meta”。
  • 另外提一下,如果您不使用related_name,请使用所有字母小写的型号名称。例如,如果你有 ExtraModel 而不是 Meta,你应该像这样访问它:a.extramodel
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-09-21
  • 1970-01-01
  • 2018-07-05
  • 2021-01-17
  • 2014-04-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多