请在我的Django项目中遇到模型关系问题。例如,我有一个模型Foo
继承自模型混合类FooBarMixin
(它是抽象类)和Bar
(它是一个模型,但与{{1 }}。基本上这是当前的实现。
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
数据存储在子模型Bar
上?如果是这样,我该怎么做?谢谢
答案 0 :(得分:1)
对不起,我是说我希望
Bar
表中的字段Foo
可见。
因此,根据您的评论,您希望在Bar
实例中获取Foo
关系的字段。
我们可以通过修补__getattr__
函数来做到这一点:
class Foo(FooBarMixin):
def __getattr__(self, name):
try:
return super(Foo, self).__getattr__(name)
except AttributeError:
return getattr(self.bar, name)
因此,如果该属性不能从Foo
实例本身中感染出来,我们将回退到相应的self.bar
对象,并旨在在该位置获取属性
设置属性将需要以类似的方式覆盖__setattr__
函数,尽管我会对此建议,因为它会带来各种副作用(保存相应的.bar
对象,等)。