Django-fr

Forum

#1 29-09-2011 21:19:25

kyrillos
Membre
Inscription : 22-06-2011
Messages : 10

Collection d'objets hérités

Hello,

un peu du mal à trouver un titre explicite. Mais mon exemple est très simple. J'ai une classe Personnage qui dispose d'un Inventaire. Cet Inventaire peut-être rempli avec des Objets. J'ai donc une classe Objet (que j'ai voulu faire abstraite du coup) et à partir de cette classe mère j'ai créé une classe pour chaque type d'Objet. Je veux évidemment pouvoir mettre n'importe quel Objet dans l'inventaire.

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

class Type(models.Model):
    name = models.CharField(max_length=200)
   
    def __unicode__(self):
        return self.name
   
class Quality(models.Model):
    name = models.CharField(max_length=200)
    level = models.IntegerField()
   
    def __unicode__(self):
        return self.name
   
    class Meta:
        verbose_name_plural = "qualities"
   
class Item(models.Model):
    name = models.CharField(max_length=200)
    description = models.CharField(max_length=200)
    type = models.ForeignKey(Type)
    actions = models.ManyToManyField(Action,blank=True)
   
    def __unicode__(self):
        return self.name

    class Meta:
        abstract = True

class Food(Item):
    ap = models.IntegerField()
   
class Tool(Item):
    durability = models.IntegerField()
   
class Ore(Item):
    quality = models.ForeignKey(Quality)
   
class Crystal(Item):
    quality = models.ForeignKey(Quality)

class Container(Item):
    capacity = models.IntegerField()
   
class Specimen(Item):
    family = models.CharField(max_length=200)
   
class Plant(Item):
    family = models.CharField(max_length=200)
   
class Weapon(Item):
    min_damage = models.IntegerField()
    max_damage = models.IntegerField()

J'imagine que mon idée est assez compréhensible, mais je ne sais pas du tout comment faire du coup, car c'est impossible avec une classe abstraite, ma classe Inventaire qui a un attribut ManyToManyField vers Item me donne une erreur.

Dernière modification par kyrillos (29-09-2011 21:21:21)

Hors ligne

#2 30-09-2011 08:45:19

quinode
Membre
Lieu : Auvergne
Inscription : 14-10-2010
Messages : 89
Site Web

Re : Collection d'objets hérités

Et c'est normal, les foreign keys matérialisent les FKeys en base de données
Item étant abstract, elle n'existe pas en base.

Enlève Meta:abstract et regarde  les "multi-table inheritance"

Hors ligne

#3 30-09-2011 09:24:22

kyrillos
Membre
Inscription : 22-06-2011
Messages : 10

Re : Collection d'objets hérités

Ok, mais du coup, je ne peux pas empecher la création d'objet de la classe Item ?

Hors ligne

#4 30-09-2011 20:14:48

frague
Membre
Inscription : 29-11-2010
Messages : 24

Re : Collection d'objets hérités

Bonsoir,

Il fautr chercher du côté des GenericForeignKey. La doc est pas trés
explicite sur le sujet, je n'ai pas encore trouvé comment faire, mais je
suis interressé par le sujet (je veux enregistrer des transactions portant
sur différents types d'objets, en joignant une information de type dans la
autre champs pour retrouver mes objets de transactions)

Bonne soirée !
François

Le 30 septembre 2011 10:24, kyrillos <siriru _AT_ gmail.com> a écrit :

> Ok, mais du coup, je ne peux pas empecher la création d'objet de la classe
> Item ?
> _______________________________________________
> django mailing list
> django _AT_ lists.afpy.org
> http://lists.afpy.org/mailman/listinfo/django
>


frague

Hors ligne

Pied de page des forums