我正在为这个问题苦苦挣扎。假设我的模型位于以下 testapp
应用 models.py
文件中:
from django.db import models
class Parent(models.Model):
my_attribute = models.BooleanField(default=False)
class Meta:
abstract = True
class Child(Parent):
child_stuff = models.CharField(max_length=255, blank=True)
现在,如果我尝试这个(例如在控制台中)
(交互式控制台)
from testapp.models import Child
hasattr(Child, 'my_attribute')
错误
c = Child()
hasattr(c, 'my_attribute')
正确
这对我来说真的很奇怪(因为Parent
是抽象的)。如何检查Child
的字段?我期待第一个 hasattr 返回 True 。我应该尝试通过 _meta
按名称获取字段并检查它是否返回字段吗?对于一个简单的需求来说似乎很棘手......
干杯!
最佳答案
Django 1.8 有一个记录的 _meta
API。
您可以使用get_fields
,
my_attribute in [field.name for field in Child._meta.get_fields()]
请注意,get_fields
有一个 include_parents
选项,您可以使用包含或排除父模型中的字段。
或者您可以使用get_field
,并捕获 FieldDoesNotExist
异常。
from django.db.models import FieldDoesNotExist
try:
field = Child._meta.get_field('my_attribute')
except FieldDoesNotExist:
# field does not exist
pass
关于python - Django 模型继承和字段上的 hasattr(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32250074/