156 Stimmen

Django - Problem mit zirkulärem Model-Import

Das verstehe ich wirklich nicht, also wenn jemand erklären könnte, wie das funktioniert, würde ich das sehr schätzen. Ich habe zwei Anwendungen, Accounts und Theme... hier ist meine Einstellungsliste:

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'accounts',
    'themes',
)

In Accounts versuche ich dies zu machen:

from themes.models import Theme

class Account(models.Model):
    ACTIVE_STATUS = 1
    DEACTIVE_STATUS = 2
    ARCHIVE_STATUS = 3
    STATUS_CHOICES = (
        (ACTIVE_STATUS, ('Aktiv')),
        (DEACTIVE_STATUS, ('Deaktiviert')),
        (ARCHIVE_STATUS, ('Archiviert')),
    )

    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)

Und in meinem Theme-Modell:

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 gibt den folgenden Fehler aus:

from themes.models import Theme
ImportError: kann Namen Theme nicht importieren

Ist das eine Art von zirkulärem Importproblem? Ich habe versucht, eine verzögerte Referenz zu verwenden, aber das scheint auch nicht zu funktionieren!

0voto

AndyC Punkte 87

Dies ist, wie ich das zirkuläre Problem durch die Angabe von 'app_name.model_name' und TYPE_CHECKING löse

models.py der Profil-App
   from typing import TYPE_CHECKING
   if TYPE_CHECKING:
     from team.models import Team

   team = models.ForeignKey('team.Team',...)

models.py der Team-App  
  Klasse Team
    name = models.CharField(...) 
    head = models.ForeignKey('profile.Profile',...)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X