In Django können Sie Beziehungen angeben wie:
author = ForeignKey('Person')
Und dann muss es intern die Zeichenfolge "Person" in das Modell konvertieren Person
.
Wo ist die Funktion, die das macht? Ich möchte es benutzen, aber ich kann es nicht finden.
django
django-models
mpen
quelle
quelle
from django.apps import AppConfig
django.apps.apps.get_model(model_name)
. AppConfig-Objekte sind für einen anderen Zweck vorgesehen und erfordern, dass Sie eine AppConfig-Instanz erstellen, um aufrufen zu könnenget_model()
.django.db.models.loading
wurde in Django 1.7 veraltet ( in 1.9 entfernt ) zugunsten des neuen Anwendungsladesystems .Django 1.7-Dokumente geben uns stattdessen Folgendes:
quelle
Nur für alle, die stecken bleiben (wie ich):
app_name
sollte wie angegeben in Anführungszeichen gesetzt werdenmodel_name
(dh nicht versuchen, es zu importieren)get_model
akzeptiert Klein- oder Großbuchstaben 'Modellname'quelle
Die meisten Modellzeichenfolgen werden als "appname.modelname" angezeigt, daher möchten Sie diese Variante möglicherweise für get_model verwenden
Der Teil des django - Code, der in der Regel solche Zeichenfolgen in ein Modell dreht , ist ein wenig komplexer Dieses aus
django/db/models/fields/related.py
:Für mich scheint dies ein guter Fall zu sein, um dies im Kerncode in eine einzige Funktion aufzuteilen. Wenn Sie jedoch wissen, dass Ihre Zeichenfolgen im Format "App.Model" vorliegen, funktionieren die beiden oben genannten Zeilen.
quelle
your_model = get_model(*your_string.rsplit('.', 1))
. Das App-Label hat manchmal ein gepunktetes Format, der Modellname ist jedoch immer eine gültige Kennung.apps.get_model
. "Als Verknüpfung akzeptiert diese Methode auch ein einzelnes Argument im Formularapp_label.model_name
."Der gesegnete Weg, dies in Django 1.7+ zu tun, ist:
Im kanonischen Beispiel aller Framework-Tutorials:
quelle
Falls Sie nicht wissen, in welcher App Ihr Modell vorhanden ist, können Sie es folgendermaßen suchen:
Denken Sie daran, dass Ihr_Modellname in Kleinbuchstaben geschrieben sein muss.
quelle
Ich bin nicht sicher, wo es in Django gemacht wird, aber Sie könnten dies tun.
Zuordnen des Klassennamens zur Zeichenfolge über Reflektion.
quelle
Eine weitere Wiedergabe mit weniger Code für die Faulen. Getestet in Django 2+
quelle
Hier ist ein weniger django-spezifischer Ansatz, um eine Klasse aus einem String zu erhalten:
oder Sie können importlib wie hier gezeigt verwenden :
quelle
2020-Lösung:
nach deinem zB:
per: Importfehler: Name get_model kann nicht importiert werden
quelle