【问题标题】:how to get model field type for validation in django [duplicate]如何在 django 中获取模型字段类型以进行验证
【发布时间】:2013-11-19 22:46:47
【问题描述】:

我试过了:

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 的东西,以便我可以验证 URL 是否格式正确?

【问题讨论】:

标签: django django-models


【解决方案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 方法中的任何位置,而是在您调用该方法时动态生成的。

【讨论】:

    猜你喜欢
    • 2019-12-24
    • 2010-12-10
    • 1970-01-01
    • 2021-11-27
    • 2020-02-08
    • 1970-01-01
    • 2020-11-29
    • 2013-12-03
    相关资源
    最近更新 更多