Ich mache folgendes:
model._meta.get_field('g').get_internal_type
Welches die folgenden zurückgibt:
<bound method URLField.get_internal_type of <Django.db.models.fields.URLField: g>>
Ich möchte nur wissen, dass dieses Feld "URLField" ist. Wie extrahiere ich das aus dieser Ausgabe?
Hinweis: Ich mache das, damit ich die Felder überprüfen kann. Wenn es sich zum Beispiel um eine URL handelt, möchte ich überprüfen, ob sie gut geformt ist.
Wenn du das getan hast:
model._meta.get_field('g').get_internal_type()
Das konnte man unmöglich als Ergebnis bekommen.
Stattdessen machen Sie Folgendes:
model._meta.get_field('g').get_internal_type
Was, wie hier erklärt, die Methode nicht aufruft, bezieht sich lediglich auf die Methode als gebundenes Methodenobjekt. Der Rückgabewert ist nicht Teil des gebundenen Methodenobjekts. Er wird von der Methode beim Aufruf der Methode erstellt. Also musst du es nennen. Also brauchst du die Klammern.
Die Antwort ist, stattdessen die Methode aufzurufen:
my_type = field.get_internal_type()
Du kannst das:
from Django.db.models.fields import *
....
if model._meta.get_field('g').__class__ is UrlField:
....
....
oder Wenn Sie String verwenden möchten, anstatt nur mit UrlField zu arbeiten
....
if type(model._meta.get_field('g')) is eval('UrlField'):
....
....
oder
isinstance(model._meta.get_field('g'), UrlField)
# This will return Boolean result
Du kannst auch gleich '==' anstelle von 'is' verwenden
In der offiziellen Dokumentation finden Sie weitere Informationen zu