如何检测父类字段

时间:2012-03-20 10:02:28

标签: python django

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

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

2 个答案:

答案 0 :(得分:2)

首先,避免任何需要执行此操作的设计。也许你应该得到单独的父对象?

但是,您可以通过检查任何django模型实例的._meta.fields属性来执行此操作。

答案 1 :(得分:1)

考虑这样的父母和孩子模型:

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

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

要创建一个函数来确定某个字段是否在其中一个父字段中定义,我们应该迭代class.__bases__,然后为每个<{p}}尝试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')返回 True

  2. is_attr_defined_on_parent(Child, 'child_field')返回错误