如何从给定模型中获取字段列表,而从抽象模型中排除字段?
.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
中排除字段?
我能想到的唯一解决方案:
为我的模型继承ModelBase
元类,以包括抽象模型和子模型之间的区别
由于多种原因,这听起来像一场噩梦...
猴子修补我的抽象模型包括一个返回字段名称列表的属性
我很可能最终会使用此路由发布答案,但是肯定会有更多的 pythonic 方法。