Di Django, Anda dapat menentukan hubungan seperti:
author = ForeignKey('Person')
Dan kemudian secara internal harus mengubah string "Person" ke dalam model Person
.
Di mana fungsi yang melakukan ini? Saya ingin menggunakannya, tetapi saya tidak dapat menemukannya.
django
django-models
Mpen
sumber
sumber
from django.apps import AppConfig
django.apps.apps.get_model(model_name)
. Objek AppConfig dimaksudkan untuk tujuan yang berbeda, dan mengharuskan Anda untuk membuat instance AppConfig untuk memanggilget_model()
.django.db.models.loading
itu usang dalam Django 1,7 ( dihapus dalam 1,9 ) mendukung baru sistem loading aplikasi .Django 1.7 docs memberi kami yang berikut:
sumber
hanya untuk siapa saja yang macet (seperti saya):
app_name
harus terdaftar menggunakan tanda kutip, sebagaimana mestinyamodel_name
(yaitu jangan mencoba mengimpornya)get_model
menerima huruf kecil atau huruf besar 'model_name'sumber
Sebagian besar model "string" muncul sebagai bentuk "appname.modelname" sehingga Anda mungkin ingin menggunakan variasi ini di get_model
Bagian dari kode Django yang biasanya mengubah string tersebut menjadi model sedikit lebih kompleks dari ini
django/db/models/fields/related.py
:Bagi saya, ini tampaknya menjadi kasus yang baik untuk memisahkan ini menjadi satu fungsi dalam kode inti. Namun, jika Anda tahu string Anda dalam format "App.Model", kedua liner di atas akan berfungsi.
sumber
your_model = get_model(*your_string.rsplit('.', 1))
. Label aplikasi terkadang berupa format bertitik, namun nama model selalu merupakan pengidentifikasi yang valid.apps.get_model
. "Sebagai jalan pintas, metode ini juga menerima satu argumen dalam formulirapp_label.model_name
."Cara terberkati untuk melakukan ini dalam Django 1.7+ adalah:
Jadi, dalam contoh kanonik semua tutorial kerangka kerja:
sumber
Jika Anda tidak tahu di mana aplikasi model Anda ada, Anda dapat mencarinya dengan cara ini:
Ingat bahwa nama_model_Anda harus lebih kecil.
sumber
Saya tidak yakin di mana hal itu dilakukan di Django, tetapi Anda bisa melakukan ini.
Memetakan nama kelas ke string melalui refleksi.
sumber
Rendition lain dengan kode kurang untuk malas. Diuji dalam Django 2+
sumber
Berikut ini adalah pendekatan yang kurang spesifik jjango untuk mendapatkan kelas dari string:
atau Anda dapat menggunakan importlib seperti yang ditunjukkan di sini :
sumber
Solusi 2020:
per mis Anda:
per: Kesalahan Impor: tidak dapat mengimpor nama get_model
sumber