如何过滤“ .get_fields()”以排除Django中的代理模型?

时间:2019-10-03 21:23:45

标签: python django django-models

如何从给定模型中获取字段列表,而从抽象模型中排除字段?

.get_fields上的文档说:

  

include_parents   默认为True。递归包括在父类上定义的字段。如果设置为False,则get_fields()将仅搜索直接在当前模型上声明的字段。直接从抽象模型或代理类继承的模型中的字段被认为是本地的,而不是父级的。

这很棒,除了我还需要排除代理/抽象模型字段。

例如:

class AbstractModel(models.Model):
    some_abstract_field = models.IntegerField()

    class Meta:
        abstract = True

class SomeModel(AbstractModel):
    some_field = models.IntegerField()

如何获取SomeModel的字段列表,但如何从AbstractModel中排除字段?

我能想到的唯一解决方案:

  1. 为我的模型继承ModelBase元类,以包括抽象模型和子模型之间的区别

    由于多种原因,这听起来像一场噩梦...

  2. 猴子修补我的抽象模型包括一个返回字段名称列表的属性

    我很可能最终会使用此路由发布答案,但是肯定会有更多的 pythonic 方法。

0 个答案:

没有答案