如何在django中获取模型字段类型以进行验证

时间:2013-11-19 22:46:48

标签: django django-models

我试过了:

field = model._meta.get_field_by_name(field_name)[0]
my_type = field.get_internal_type

这不起作用,因为它返回了一些绑定方法,如:

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

我想要一些我可以使用的东西,如CharField,URLField,DoubleField等。

我如何获得像URLField这样的内容,以便我可以验证网址是否格式正确?

1 个答案:

答案 0 :(得分:1)

在Python中,如果要调用函数或方法,则必须在参数周围使用括号。如果没有参数,则只使用空括号。

您正在做的只是引用方法本身,而不是调用它。

这是一个简化的例子:

>>> def foo():
...     return 3
>>> foo()
3
>>> foo
<function __main__.foo>

你无法从函数中“提取”结果;你必须打电话。*

因此,在您的示例中,只需将第二行更改为:

my_type = field.get_internal_type()

*好的,在这种情况下,因为函数总是返回一个常量值,你可以通过例如从源或func_code.co_consts元组中提取它来提取它。但显然这不会起作用;如果您想获得datetime.now()的值,它不会存储在now方法的任何位置,当您调用方法时,它会立即生成。