如何从django中的db模型获取字段类型字符串

时间:2013-11-19 20:59:59

标签: python django django-models

我正在做以下事情:

model._meta.get_field('g').get_internal_type

返回以下内容:

<bound method URLField.get_internal_type of <django.db.models.fields.URLField: g>>

我只想知道这个字段是“URLField”。如何从此输出中提取它?

注意:我这样做,以便我可以对字段进行验证。例如,如果是网址,我想检查它是否格式正确。

3 个答案:

答案 0 :(得分:30)

如果你这样做:

model._meta.get_field('g').get_internal_type()

你不可能得到那样的结果。

相反,你这样做:

model._meta.get_field('g').get_internal_type

正如here所解释的那样,它不会调用该方法,它只是将该方法称为绑定方法对象。返回值不是该绑定方法对象的一部分,它是在调用方法时由方法创建的。所以,你必须打电话给它。所以你需要括号。

答案 1 :(得分:4)

答案是改为调用方法:

my_type = field.get_internal_type()

答案 2 :(得分:2)

您可以这样做:

from django.db.models.fields import *
....
if model._meta.get_field('g').__class__ is UrlField:
    ....
....

或如果您想使用String而不是仅与UrlField

一起使用
....
if type(model._meta.get_field('g')) is eval('UrlField'):
    ....
....

isinstance(model._meta.get_field('g'), UrlField)
# This will return Boolean result

您还可以使用等号'=='代替'is'

您可以查看官方文档以获取有关的更多信息