请问我的 Django 项目中的模型关系有问题。例如,我有一个模型 Foo 继承自模型混合 FooBarMixin ,它是一个抽象类和 Bar 这是一个模型但有一个 OnetoOne 与 Foo 的关系。基本上这是当前的实现。
class Foo(FooBarMixin):
pass
class FooBarMixin(model.Model):
bar = model.OneToOneField(Bar, on_delete=CASCADE,
related_name="tracked_%(class)s")
class Meta:
abstract = True
class Bar(model.Model):
pass
是否可以在不使用 OnetoOne 关系的情况下将 Bar 数据存储在子模型 Foo 上?如果是这样,我该怎么做?谢谢
请您参考如下方法:
Sorry I meant I want the fields in
Barto be visible on theFootable.
根据您的评论,您因此想要在 Foo 实例中获取 Bar 关系的字段。
我们可以通过修补 __getattr__ 函数来做到这一点:
class Foo(FooBarMixin):
def __getattr__(self, name):
<b>try:</b>
return super(Foo, self).__getattr__(name)
<b>except AttributeError:</b>
<b>return getattr(self.bar, name)</b>
因此,如果属性不能从 Foo 实例本身获取,我们将回退到相应的 self.bar 对象上,并且旨在获取该位置的属性。
设置属性需要以类似的方式覆盖 __setattr__ 函数,尽管我不建议这样做,因为它会引入各种副作用(保存相应的 . bar 对象等)。
