wake-up-neo.net

Django kann den Namen x nicht importieren

Ich habe einen Fehler, den ich nicht verstehe!

Name kann nicht importiert werden Element

In meinem Modell habe ich Artikel. Diese Elemente sind für Aktionen erforderlich. 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()
41
Cyril F

Ihr Code enthält einen zirkulären Import. Aus diesem Grund kann das Element 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 beschrieben. Zum Beispiel :

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

Wie von Madjar vorgeschlagen, besteht wahrscheinlich ein zirkulärer Import in Ihrem Code. Wenn Sie Probleme haben, herauszufinden, wo sich der Kreis befindet (welche Module und Importe betroffen sind), können Sie die Traceback-Option verwenden, um eine Vorstellung von dem Problem zu erhalten:

python manage.py validate --traceback
27
Ciske Boekelo

Dies war der erste Beitrag, der bei Google veröffentlicht wurde. Ich werde diese alternative Fehlerursache veröffentlichen.

In meinem Code gab es keine Umlaufimporte. Ich löste dieses Problem durch manuelles Löschen aller .pyc-Dateien in meinem Projekt. Anscheinend konnte der Neustart der Anwendung meinen Code nicht erneut kompilieren.

8
Pythonator

Versuchen Sie, Ihr Modell lokal als öffentlich zu importieren, Beispiel

def sample_function():
    from effects.models import Effect # import within function or class
3
ugali soft

Eine ähnliche Situation wie bei Pythonator - Ich hatte eine alternative Ursache für dieselbe 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.

0
Jonathan Porter