Vous n'êtes pas identifié(e).
J'ai une erreur cannot import name Item que je ne comprend pas.
Dans mon modèle, j'ai des items. Ces items sont nécessaire pour certaines actions. Mais certains (autres) items ont un effet sur les actions.
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(Action)
class ApEffect(Effect):
ap = models.IntegerField()
Dernière modification par kyrillos (07-10-2011 09:39:04)
Hors ligne
Pour résoudre mon problème de dépendance (importation circulaire) :
effects
from django.db import models
class Effect(models.Model):
action = models.ForeignKey('actions.Action')
class ApEffect(Effect):
ap = models.IntegerField()
Hors ligne
Je pense que c'est simplement parce que Item a un manyToMany vers
Effect. Mais Effect a une foreignKey vers Action. Tu essaies d'import
Item dans Action alors qu'Item ne peut pas être créer sans Action. En
gros dans item tu import Effect et implicitement, tu importe aussi
Action puisque Action est utilisé par Effect. Je ne sais pas si cela et
très claire dis comme ça, mais en gros tu as créé une espèce de boucle
impossible à interpréter pour python.
Après je fais peut-être fausse route, je suis un peu empatté ce matin.
BILLION Sébastien
the Answer to the ultimate question of life, the universe and everything
is 42
http://www.sebastienbillion.com/ <http://www.sebastienbillion.com/>
Le 06/10/2011 14:33, kyrillos a écrit :
> J'ai une erreur cannot import name Item que je ne comprend pas
>
> [h]items[/h]
>
> 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'
>
> [h]actions[/h]
>
> 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'
>
> [h]effects[/h]
>
> from django.db import models
> from actions.models import Action
>
> class Effect(models.Model):
> action = models.ForeignKey
>
> class Meta:
> abstract = True
>
> class ApEffect(Effect):
> ap = models.IntegerField()
> _______________________________________________
> django mailing list
> django _AT_ lists.afpy.org
> http://lists.afpy.org/mailman/listinfo/django
Hors ligne