我有一个父类和一个继承父类的子类。在子类对象中,我需要区分父类字段和子类字段。
这些信息是否可用?如果是的话,在哪里。需要Python解决方案,特别是Django。
答案 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
现在:
is_attr_defined_on_parent(Child, 'parent_field')
返回 True ,
is_attr_defined_on_parent(Child, 'child_field')
返回错误。