Как получить строку типа поля из модели db в django

Я делаю следующее:

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

Что возвращает следующее:

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

Я только хочу знать, что это поле - "URL-адрес". Как извлечь из этого вывода?

Примечание. Я делаю это так, чтобы выполнять проверки в полях. Например, если URL-адрес, я хочу проверить, хорошо ли он сформирован.

Ответ 1

Если вы делали это:

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

В результате вы не сможете получить это.

Вместо этого вы делаете это:

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

Что, как описано здесь, не вызывает метод, он просто ссылается на метод как объект связанного метода. Возвращаемое значение не является частью объекта связанного метода, созданного методом при вызове метода. Итак, вы должны это назвать. Поэтому вам нужны скобки.

Ответ 2

Ответ заключается в вызове метода вместо:

my_type = field.get_internal_type()

Ответ 3

Вы можете сделать это:

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'

Вы можете проверить официальную документацию для получения дополнительной информации о