wake-up-neo.net

wie man eine Feldtyp-Zeichenkette von einem DB-Modell in Django erhält

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.

17
Atma

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.

26
abarnert

Die Antwort ist, stattdessen die Methode aufzurufen:

my_type = field.get_internal_type()
3
Atma

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

2
Pranav Raut