Je fais ce qui suit:
model._meta.get_field('g').get_internal_type
Ce qui retourne le suivant:
<bound method URLField.get_internal_type of <Django.db.models.fields.URLField: g>>
Je veux seulement savoir que ce champ est "URLField". Comment puis-je extraire cela de cette sortie?
Note: Je le fais pour pouvoir valider les champs. Par exemple, si une url, je veux vérifier si elle est bien formée.
Si vous faisiez ceci:
model._meta.get_field('g').get_internal_type()
Vous ne pourriez pas obtenir cela en conséquence.
Au lieu de cela, vous faites ceci:
model._meta.get_field('g').get_internal_type
Comme expliqué ici , n’appelle pas la méthode, il fait simplement référence à la méthode en tant qu’objet méthode lié. La valeur de retour ne fait pas partie de cet objet de méthode liée, elle est créée par la méthode lorsque la méthode est appelée. Donc, vous devez l'appeler. Donc, vous avez besoin des parenthèses.
La réponse consiste à appeler la méthode à la place:
my_type = field.get_internal_type()
Tu peux le faire:
from Django.db.models.fields import *
....
if model._meta.get_field('g').__class__ is UrlField:
....
....
ou Si vous souhaitez utiliser String au lieu de travailler uniquement avec UrlField
....
if type(model._meta.get_field('g')) is eval('UrlField'):
....
....
ou
isinstance(model._meta.get_field('g'), UrlField)
# This will return Boolean result
Vous pouvez également utiliser un '==' égal au lieu de 'est'
Vous pouvez consulter la documentation officielle pour plus d'informations sur