Saya benar-benar tidak mengerti ini, jadi jika seseorang dapat menjelaskan cara kerjanya, saya akan sangat menghargainya. Saya memiliki dua aplikasi, Akun dan Tema ... berikut adalah daftar pengaturan saya:
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'accounts',
'themes',
)
Di akun, saya mencoba melakukan ini:
from themes.models import Theme
class Account(models.Model):
ACTIVE_STATUS = 1
DEACTIVE_STATUS = 2
ARCHIVE_STATUS = 3
STATUS_CHOICES = (
(ACTIVE_STATUS, ('Active')),
(DEACTIVE_STATUS, ('Deactive')),
(ARCHIVE_STATUS, ('Archived')),
)
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=250)
slug = models.SlugField(unique=True, verbose_name='URL Slug')
status = models.IntegerField(choices=STATUS_CHOICES, default=ACTIVE_STATUS, max_length=1)
owner = models.ForeignKey(User)
enable_comments = models.BooleanField(default=True)
theme = models.ForeignKey(Theme)
date_created = models.DateTimeField(default=datetime.now)
Dan dalam model tema saya:
class Theme(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=250)
slug = models.SlugField(unique=True, verbose_name='URL Slug')
date_created = models.DateTimeField(default=datetime.now)
class Stylesheet(models.Model):
id = models.AutoField(primary_key=True)
account = models.ForeignKey(Account)
date_created = models.DateTimeField(default=datetime.now)
content = models.TextField()
Django menendang kesalahan berikut:
from themes.models import Theme
ImportError: cannot import name Theme
Apakah ini semacam masalah impor melingkar? Saya sudah mencoba menggunakan referensi malas, tetapi tampaknya itu juga tidak berhasil!
django
django-models
Hanpan
sumber
sumber
Account
dari modul di manaTheme
ditentukan?Jawaban:
Hapus impor
Theme
dan gunakan nama model sebagai string.sumber
'themes.Theme'
, karena ada di aplikasi yang berbeda.Hingga Django 1.7:
Gunakan
get_model
fungsidjango.db.models
yang dirancang untuk impor model malas .:Dalam kasus Anda:
Sekarang Anda bisa menggunakan
Theme
Untuk Django 1.7+:
sumber
apps.get_model(app_label, model_name)
atauapps.get_model('app_label.model_name')
di Django 1.7+Sesuatu yang belum saya lihat disebutkan di mana pun dengan cukup detail adalah cara merumuskan string dengan benar di dalam ForeignKey saat mereferensikan model di aplikasi berbeda. String ini harus
app_label.model_name
. Dan, yang paling penting,app_label
bukan keseluruhan baris di INSTALLED_APPS, tetapi hanya komponen terakhirnya . Jadi jika INSTALLED_APPS Anda terlihat seperti ini:lalu untuk menyertakan ForeignKey ke model di app2 dalam model app1, Anda harus melakukan:
Saya menghabiskan waktu cukup lama untuk mencoba menyelesaikan masalah impor melingkar (jadi saya tidak bisa begitu saja
from another.path.to.app2.models import TheModel
) sebelum saya tersandung ke ini, google / SO tidak membantu (semua contoh memiliki jalur aplikasi komponen tunggal), jadi semoga ini akan membantu yang lain django pemula.sumber
Sejak Django 1.7 cara yang benar adalah pergi seperti ini:
Lihat: https://docs.djangoproject.com/ja/1.9/ref/applications/#django.apps.apps.get_model
sumber
apps.get_model('your_app_name.YourModel')
nyaman untuk digunakan dimap
dll.