Django过滤字段列表只能获取某种类型的字段

时间:2016-01-28 15:57:40

标签: python django

这是在截获的表单实例的上下文中。我需要获取我能够获得的字段列表。但是,我无法获得图像字段。 这是我使用的代码:

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)enter image description here

2 个答案:

答案 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