我有一个父类和一个继承父类的子类。在子类对象中,我需要区分父类字段和子类字段。
这些信息可用吗?如果是,在哪里。需要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
现在:
is_attr_defined_on_parent(Child, 'parent_field')
返回真,is_attr_defined_on_parent(Child, 'child_field')
返回False。