web-dev-qa-db-fra.com

comment obtenir une chaîne de type de champ à partir d'un modèle de base de données dans django

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.

17
Atma

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.

26
abarnert

La réponse consiste à appeler la méthode à la place:

my_type = field.get_internal_type()
3
Atma

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

2
Pranav Raut