Django的。如何将mixin中的父模型字段存储在子模型中?

时间:2018-07-10 08:12:48

标签: python django django-models django-rest-framework

请在我的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上?如果是这样,我该怎么做?谢谢

1 个答案:

答案 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对象,等)。