Cyr*_*l F 47 python django django-models
我收到一个我不明白的错误!
无法导入名称项
在我的模型中,我有物品.这些项目是行动所必需的.但其中一些项目对行动有影响:
项目
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'
Run Code Online (Sandbox Code Playgroud)
行动
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'
Run Code Online (Sandbox Code Playgroud)
效果
from django.db import models
from actions.models import Action
class Effect(models.Model):
action = models.ForeignKey
class ApEffect(Effect):
ap = models.IntegerField()
Run Code Online (Sandbox Code Playgroud)
mad*_*jar 87
您的代码中存在循环导入,这就是无法导入Item的原因.
您可以通过删除其中一个文件中的类的导入来解决问题,并将其替换为包含类名称的字符串,如文档中所述.例如 :
effects = models.ManyToManyField('effects.Effect',through='ItemEffect',blank=True)
Run Code Online (Sandbox Code Playgroud)
Cis*_*elo 28
就像madjar建议的那样,代码中可能存在循环导入.如果您无法找到圆圈的位置(涉及哪些模块和导入),您可以使用traceback选项来了解问题所在:
python manage.py validate --traceback
Run Code Online (Sandbox Code Playgroud)
小智 9
这是Google上发布的第一篇文章,因此我将发布此替代错误原因.
在我的代码中没有循环导入,我通过手动删除项目中的所有.pyc文件解决了这个问题.显然重新启动应用程序并没有重新编译我的代码.
尝试在本地导入模型,而不是作为公共模型导入,例如
def sample_function():
from effects.models import Effect # import within function or class
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
43798 次 |
| 最近记录: |