how to get field type string from db model in django
Question:
I am doing the following:
model._meta.get_field('g').get_internal_type
Which returns the following:
<bound method URLField.get_internal_type of <django.db.models.fields.URLField: g>>
I only want the know that this field is “URLField” . How do I extract that from this output?
Note: I am doing this so that I can do validation on the fields. For example if a url , I want to check if it is well formed.
Answers:
The answer is to call the method instead:
my_type = field.get_internal_type()
If you were doing this:
model._meta.get_field('g').get_internal_type()
You could not possibly get that as a result.
Instead, you are doing this:
model._meta.get_field('g').get_internal_type
Which, as explained here, does not call the method, it just refers to the method as a bound method object. The return value is not part of that bound method object, it’s created by the method when the method is called. So, you have to call it. So you need the parentheses.
You can do this:
from django.db.models.fields import *
....
if model._meta.get_field('g').__class__ is UrlField:
....
....
or If you want to use String instead of working only with UrlField
....
if type(model._meta.get_field('g')) is eval('UrlField'):
....
....
or
isinstance(model._meta.get_field('g'), UrlField)
# This will return Boolean result
You Can also use equal ‘==’ instead of ‘is’
You can Check Offical Documentation for more information about
I am doing the following:
model._meta.get_field('g').get_internal_type
Which returns the following:
<bound method URLField.get_internal_type of <django.db.models.fields.URLField: g>>
I only want the know that this field is “URLField” . How do I extract that from this output?
Note: I am doing this so that I can do validation on the fields. For example if a url , I want to check if it is well formed.
The answer is to call the method instead:
my_type = field.get_internal_type()
If you were doing this:
model._meta.get_field('g').get_internal_type()
You could not possibly get that as a result.
Instead, you are doing this:
model._meta.get_field('g').get_internal_type
Which, as explained here, does not call the method, it just refers to the method as a bound method object. The return value is not part of that bound method object, it’s created by the method when the method is called. So, you have to call it. So you need the parentheses.
You can do this:
from django.db.models.fields import *
....
if model._meta.get_field('g').__class__ is UrlField:
....
....
or If you want to use String instead of working only with UrlField
....
if type(model._meta.get_field('g')) is eval('UrlField'):
....
....
or
isinstance(model._meta.get_field('g'), UrlField)
# This will return Boolean result
You Can also use equal ‘==’ instead of ‘is’
You can Check Offical Documentation for more information about