python circular - Django kann den Namen x nicht importieren




importerror cannot (5)

Ich habe einen Fehler, den ich nicht verstehe!

Name kann nicht importiert werden

In meinem Modell habe ich Gegenstände. Diese Elemente werden für Aktionen benötigt. Einige dieser Elemente wirken sich jedoch auf Aktionen aus:

Artikel

from django.db import models
from effects.models import Effect

class Type(models.Model):
    name = models.CharField(max_length=200)

    def __unicode__(self):
         return self.name

class Item(models.Model):
    name = models.CharField(max_length=200)
    description = models.CharField(max_length=200)
    type = models.ForeignKey(Type)
    quality = models.IntegerField()
    effects = models.ManyToManyField(Effect,through='ItemEffect',blank=True)
    item_requirement = models.ManyToManyField('self',through='ItemCraft',symmetrical=False,blank=True)
points = models.IntegerField()

    def __unicode__(self):
        return self.name

class Food(Item):
    ap = models.IntegerField()

class Tool(Item):
    durability = models.IntegerField()

[....]

class ItemEffect(models.Model):
    item = models.ForeignKey(Item)
    effect = models.ForeignKey(Effect)

def __unicode__(self):
    return self.item.name+':'+str.lower(self.effect.name)

class Meta:
    verbose_name_plural = 'items effects'

class ItemCraft(models.Model):
    item = models.ForeignKey(Item,related_name='%(class)s_item_crafted')
    item_requirement = models.ForeignKey(Item,related_name='%(class)s_item_required')
    number = models.IntegerField()

    def __unicode__(self):
        return self.item.name+' requires '+str.lower(self.item.name)+'('+self.number+')'

    class Meta:
        verbose_name_plural = 'items crafts'

Aktionen

from django.db import models
from items.models import Item

class Action(models.Model):
    name = models.CharField(max_length=200)
    description = models.CharField(max_length=200)
    pa = models.IntegerField()

    def __unicode__(self):
        return self.name

class CraftAction(Action):
    item = models.ForeignKey(Item)

    def __unicode__(self):
        return self.item.name+'\'s craft'

    class Meta:
        verbose_name_plural = 'crafts actions'

Auswirkungen

from django.db import models
from actions.models import Action

class Effect(models.Model):
    action = models.ForeignKey

class ApEffect(Effect):
    ap = models.IntegerField()

Answers

Dies war der erste Post, der auf Google erschien, daher werde ich diese alternative Fehlerursache veröffentlichen.

In meinem Code gab es keine zirkulären Importe. Ich löste dieses Problem, indem ich manuell alle .pyc-Dateien in meinem Projekt löschte. Offensichtlich hat das Neustarten der Anwendung meinen Code nicht neu kompiliert.


Es gibt einen kreisförmigen Import in Ihrem Code, deshalb kann der Artikel nicht in Aktion importiert werden.

Sie können das Problem lösen, indem Sie den Import einer Klasse in einer Ihrer Dateien entfernen und durch eine Zeichenfolge ersetzen, die den Namen der Klasse enthält, wie in der Dokumentation erläutert . Beispielsweise :

effects = models.ManyToManyField('effects.Effect',through='ItemEffect',blank=True)

Wie von madjar vorgeschlagen, gibt es wahrscheinlich einen zirkulären Import in Ihrem Code. Wenn Sie nicht wissen, wo sich der Kreis befindet (welche Module und Importe sind betroffen), können Sie die Traceback-Option verwenden, um eine Vorstellung davon zu bekommen, wo das Problem liegt:

python manage.py validate --traceback

Eine ähnliche Situation wie Pythonator - Ich hatte eine alternative Ursache für die gleiche Fehlermeldung.

In meinem Fall hatte ich vergessen, die virtuelle Umgebung zu aktivieren, die ich für mein Projekt eingerichtet hatte und versuchte, den Server auszuführen. Nach dem Aktivieren der Umgebung und dem erneuten Ausführen des Servers hatte ich keine Probleme.


In deiner models.py :

Class a(models.model):
   Var = models.BooleanField(default=True)

Setzen Sie einfach den gewünschten Wert in die Klammern





python django django-models