django OneToOne 反向访问
Posted
技术标签:
【中文标题】django OneToOne 反向访问【英文标题】:django OneToOne reverse access 【发布时间】: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() 这增加了混乱 【参考方案1】:定义一个related_name
来调用反向访问器。
a = models.OneToOneField(A, related_name='foobar')
# ...
a.foobar
【讨论】:
如果没有相关名称,您可以使用 a.meta 而不是 a.foobar。但绝对不要称模型为“Meta”。 另外提一下,如果您不使用related_name
,请使用所有字母小写的型号名称。例如,如果你有 ExtraModel 而不是 Meta,你应该像这样访问它:a.extramodel
。
参考:docs.djangoproject.com/en/2.1/topics/db/examples/one_to_one以上是关于django OneToOne 反向访问的主要内容,如果未能解决你的问题,请参考以下文章
Django 中的 OneToOne、ManyToMany 和 ForeignKey 字段有啥区别?