Django无法导入名称x。
Django无法导入名称x。
这个问题已经有答案了:
关于\"ImportError: 无法导入名称X\"或\"AttributeError:...(很可能因为循环导入)\",我该怎么办?
我看不懂出现了什么错误!
无法导入名称Item
在我的模型中,我有一些物品,这些物品对于执行操作是必需的。但是其中一些物品对于操作产生效果:
物品
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'
操作
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'
效果
from django.db import models from actions.models import Action class Effect(models.Model): action = models.ForeignKey class ApEffect(Effect): ap = models.IntegerField()
admin 更改状态以发布 2023年5月23日
您的代码存在循环引用,这就是为什么无法在操作中导入Item的原因。
您可以通过在您的文件中删除一个类的导入,并将其替换为包含类名称的字符串来解决问题,如文档中所述。 例如:
effects = models.ManyToManyField('effects.Effect',through='ItemEffect',blank=True)