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

Atm*_*tma 22 python django django-models

我正在做以下事情:

model._meta.get_field('g').get_internal_type
Run Code Online (Sandbox Code Playgroud)

返回以下内容:

<bound method URLField.get_internal_type of <django.db.models.fields.URLField: g>>
Run Code Online (Sandbox Code Playgroud)

我只想知道这个字段是"URLField".如何从此输出中提取?

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

aba*_*ert 32

如果你这样做:

model._meta.get_field('g').get_internal_type()
Run Code Online (Sandbox Code Playgroud)

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

相反,你这样做:

model._meta.get_field('g').get_internal_type
Run Code Online (Sandbox Code Playgroud)

其中,作为解释在这里,不调用该方法,它只是指的是方法绑定方法的对象.返回值不是该绑定方法对象的一部分,它是在调用方法时由方法创建的.所以,你必须打电话给它.所以你需要括号.


Pra*_*aut 10

你可以这样做:

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

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

....
if type(model._meta.get_field('g')) is eval('UrlField'):
    ....
....
Run Code Online (Sandbox Code Playgroud)

或者

isinstance(model._meta.get_field('g'), UrlField)
# This will return Boolean result
Run Code Online (Sandbox Code Playgroud)

您也可以使用相等的 '==' 而不是 'is'

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


Atm*_*tma 6

答案是调用该方法:

my_type = field.get_internal_type()
Run Code Online (Sandbox Code Playgroud)