我正在努力解决这个问题。假设我的模型位于以下testapp
app 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)
现在,如果我尝试这个(例如在控制台中)
(InteractiveConsole)
来自testapp.models导入Child
hasattr(Child,'my_attribute')
假
c = Child()
hasattr(c,'my_attribute')
真
这对我来说真的很奇怪(因为Parent
是抽象的)。我如何查看Child
的字段?我期待第一个hasattr返回True。我应该通过_meta
尝试按名称获取字段并检查它是否返回字段?对于一个简单的需求来说似乎很棘手...
干杯!
答案 0 :(得分:2)
print "my_attribute" in [
field.name for field in
Child._meta.get_fields(include_parents=True, include_hidden=True)
]
答案 1 :(得分:2)
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