这是在截获的表单实例的上下文中。我需要获取我能够获得的字段列表。但是,我无法获得图像字段。 这是我使用的代码:
list_of_image_fields = [x.name for x in instance._meta.fields if type(x) == 'django.db.models.fields.files.ImageFieldFile']
x.name正确地表示了meta.fields中实例的所有字段的每个名称。 使用if语句,我希望只获得ImageField类型。 '类型(X)'当我把它而不是x.name返回时:
<class 'django.db.models.fields.files.ImageFieldFile'> #for each field
但它并没有按照我把它放在if语句中的方式工作,而if语句最后是一个空列表。 您可以在附图中看到我在调试器中获得的实例._meta.fields.03(字段编号为03)
答案 0 :(得分:4)
类型不是字符串,而是实际类型。所以比较一下!
from django.db.models.fields.files import ImageFieldFile
list_of_image_fields = [x.name for x in instance._meta.fields if type(x) == ImageFieldFile]
您在调试器中看到的实际上是str(type(ImageFieldFile))
的结果,这是您将类型转换为字符串时所获得的结果,因此人类可以阅读它。
答案 1 :(得分:-2)
如果你type(x)
,它会给你一个类型对象而不是字符串。使用函数get_internal_type
:
list_of_image_fields = [x.name for x in instance._meta.fields if x.get_internal_type() == 'ImageFieldFile']
Django doc about get_internal_type。