Běh do Kruhového Import problém

0

Otázka

Mám dvě aplikace(přední a lrnadmin) v projektu(portál) tohle je můj kořenový adresář

enter image description here

problém je, že když jsem importovat modely v sobě to mi dává chybu V tomto modely chci Kvalifikace jako Cizí klíč, který důvod, proč chci, dovozní Kvalifikace z lrnadmin.modely this is my front.models.py

from datetime import datetime, timezone
from django.db import models
from django.db.models import expressions
from django.db.models.base import Model
from django.utils import timezone

from lrnadmin.models import Qualification

class Staff(models.Model):
    """Model definition for Staff."""
    # TODO: Define fields here
    nStaff = models.CharField(max_length= 50)
    role = models.CharField(max_length= 50)
    lrnQ = models.ForeignKey(Qualification, on_delete= models.CASCADE)
    relQ = models.CharField(max_length=200)
    relE = models.CharField(max_length=200)
    # Cv = models.CharField(max_length=100, blank=True, null=True)
    # Doc = models.CharField(max_length=100, blank=True, null=True)
    sec7 = models.ForeignKey(Sec7, on_delete=models.CASCADE)
    class Meta:
        """Meta definition for Staff."""

        verbose_name = 'Staff'
        verbose_name_plural = 'Staffs'

    # def __str__(self):
    #     """Unicode representation of Staff."""
    #     pass

a v tomto modely chci Uživatelská jako Cizí klíč, který důvod, proč chci importovat Uživatele z fronty.modely this is my lrnadmin.models.py

from django.contrib.auth.models import AbstractUser
from django.db import models
from django.utils import timezone
from front.models import User

class CentreCode(models.Model):
    """Model definition for CentreCode."""

    # TODO: Define fields here
    user = models.ForeignKey(User, on_delete= models.CASCADE)
    centreCode = models.CharField(max_length= 20)
    categories = models.CharField(max_length = 20)
    authorisation = models.CharField(max_length= 20)
    registrationType = models.CharField(max_length= 20)

    class Meta:
        """Meta definition for CentreCode."""

        verbose_name = 'CentreCode'
        verbose_name_plural = 'CentreCodes'

    # def __str__(self):
    #     """Unicode representation of CentreCode."""
    #     pass

Jak mohu zvládnout

File "E:\lrn\portal\lrnadmin\models.py", line 4, in <module>
    from front.models import User
  File "E:\lrn\portal\front\models.py", line 7, in <module>
    from lrnadmin.models import Qualification
ImportError: cannot import name 'Qualification' from partially initialized module 'lrnadmin.models' (most likely due to a circular import) (E:\lrn\portal\lrnadmin\models.py)
django python
2021-11-24 05:34:29
2

Nejlepší odpověď

1

Můžete "lazy-load" model pomocí řetězec doslovný, jak je popsáno v docs,, takže například s front aplikace User model lze definovat jako:

# Remove from front.models import User


class CentreCode(models.Model):
    # ...
    user = models.ForeignKey('front.User', on_delete= models.CASCADE)
    # ...

Nebo, pokud jste definovali front.models.User jako vlastní uživatelský model, je to vysoce navrhl, že jste jen odkaz na vlastní model pomocí settings.AUTH_USER_MODEL jak je popsáno here:

from django.conf import settings
# Remove from front.models import User


class CentreCode(models.Model):
    # ...
    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete= models.CASCADE)
    # ...
2021-11-24 06:01:01

můj Uživatel je normální modely třídy
Habib Ur Rehman

třídy Uživatele(modelů.Model): """definice Modelu pro Uživatele.""" # TODO: Definovat pole uživatelské jméno = modely.CharField(max_length= 50) heslo = modely.CharField(max_length = 200) kategorie = modely.CharField(max_length=30) status = modely.CharField(default="čekající", max_length=20) role = modely.CharField(default="centra", max_length=20) created_date = modely.DateTimeField(default= časové pásmo.teď)
Habib Ur Rehman

Jste také zadat v nastavení pomocí AUTH_USER_MODEL?
Brian Destura

Vytvořil jsem hlavní AUTH_USER_MODEL je další třídy model (Login)
Habib Ur Rehman

V tom případě zkuste použít první přístup s řetězcový literál. I když musím říct, že jsem není si jistý, proč Login používá se jako uživatel modelu, ale to je na vás
Brian Destura

Díky za to, že vaše odpověď prosím rozveďte.. 'přední.Uživatel' proč to není 'fronta.modely.Uživatel
Habib Ur Rehman
0

můžete vyzkoušet get_model, která zabrání importu modelu v době spuštění

   from django.apps import apps
   qualification_model = app.get_model('lrnadmin', 'Qualification')

NEBO

můžete se pokusit importovat model uvnitř funkce namísto importu na úrovni modulu

2021-11-24 05:49:25

V jiných jazycích

Tato stránka je v jiných jazycích

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................