如何检测父类字段



我有一个父类和一个继承父类的子类。在子类对象中,我需要区分父类字段和子类字段。

这些信息可用吗?如果是,在哪里。需要Python中的解决方案,特别是Django。

首先,避免任何需要这样做的设计。也许您应该获得单独的父对象?

但是,您可以通过检查任何django模型实例的._meta.fields属性来实现这一点。

考虑这样一个父子模型:

class Parent(models.Model):
    parent_field = models.CharField(max_length=100)
class Child(Parent):
    child_field = models.CharField(max_length=100)

要生成一个函数来确定是否在父级中定义了字段,我们应该迭代class.__bases__,并对每个尝试baseclass._meta.get_field

def is_attr_defined_on_parent(child, attr):
    for parent in child.__bases__:
        try:
            parent._meta.get_field(attr)
        except models.FieldDoesNotExist:
            continue
        else:
            return True
    return False

现在:

  1. is_attr_defined_on_parent(Child, 'parent_field')返回

  2. is_attr_defined_on_parent(Child, 'child_field')返回False

最新更新