Django-fr

Forum

#1 14-02-2012 11:03:42

ju
Membre
Inscription : 14-02-2012
Messages : 1

base de donné avec heritage et generation du model

salut a tous,


je viens de créer un base de données, pour generer rapidement un prototype on m'a conseiller django donc je ne fait que debuter.

ma base de donnée possede des table herité comme suit

heritage
(source : http://sqlpro.developpez.com/cours/mode … heritage/)

apres avoir parametrer django je recupere le model (manage.py inspectdb>monAppli/models.py)
je reorganise tout sa en accord avec les contraintes  d'intégrités

je syncrhonise le model (./manage.py syncdb)

tout est bon je lance l'interface d'admin apres parametrage de monAppli/admin.py

et l'erreur suivante apparait

OperationalError at /admin/prototype/appliance/
(1054, "Unknown column 'appliance.id' in 'field list'")
Request Method:    GET
Request URL:    http://127.0.0.1:8000/admin/prototype/appliance/
Django Version:    1.3.1
Exception Type:    OperationalError
Exception Value:    
(1054, "Unknown column 'appliance.id' in 'field list'")
Exception Location:    /usr/lib64/python2.7/site-packages/MySQLdb/connections.py in defaulterrorhandler, line 36
Python Executable:    /usr/bin/python
Python Version:    2.7.2
Python Path:    
['/home/dsi-sesi/chatelai/partage_projet/testDjango/proto',
 '/usr/lib64/python27.zip',
 '/usr/lib64/python2.7',
 '/usr/lib64/python2.7/plat-linux2',
 '/usr/lib64/python2.7/lib-tk',
 '/usr/lib64/python2.7/lib-old',
 '/usr/lib64/python2.7/lib-dynload',
 '/usr/lib64/python2.7/site-packages',
 '/usr/lib64/python2.7/site-packages/PIL',
 '/usr/lib64/python2.7/site-packages/gst-0.10',
 '/usr/lib64/python2.7/site-packages/gtk-2.0',
 '/usr/lib/python2.7/site-packages',
 '/usr/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg-info']
Server time:    Tue, 14 Feb 2012 03:49:45 -0600

ma classe applicance derive de serveur
donc elle ne possede pas de clé primaire seulement une clé etrangere qui referencie la table mere (qui elle me est heriter d'une classe equipement :s)

class Equipement(models.Model):
    idequipement = models.IntegerField(primary_key=True)
    os = models.ForeignKey(Os, null=True, blank=True)
    equipement_poid = models.IntegerField(null=True, blank=True)
    equipement_cpu = models.IntegerField(null=True, blank=True)
    equipement_ram = models.IntegerField(null=True, blank=True)
    class Meta:
        db_table = u'equipement'


class Serveur(models.Model):
    idserveur = models.ForeignKey(Equipement, db_column='idserveur')
    class Meta:
        db_table = u'serveur'

class Appliance(models.Model):
    idappliance = models.ForeignKey(Serveur, db_column='idappliance')
    appliance_nom = models.IntegerField(null=True, blank=True)
    class Meta:
        db_table = u'appliance'

(la table serveur risque de disparaitre d'ici peu car elle ne contient pas d'infos utiles pour le moment mais là n'est pas a question tongue )


alors comment faire pour dire a django qu'il n'y a pas de clé primaire mais une clé etrangere seulement ?
est-ce que mon erreur viens bien de sa ?


voilas en espérant que quelqu'un puisse m'aider un peu
merci

Dernière modification par ju (14-02-2012 11:06:30)

Hors ligne

#2 15-02-2012 08:18:17

luc
Membre
Lieu : Loire (42)
Inscription : 19-02-2011
Messages : 15
Site Web

Re : base de donné avec heritage et generation du model

Bonjour,

Pour hériter d'un modèle, il suffit de faire hériter les classes

class Appliance(Serveur):
    appliance_nom = models.IntegerField(null=True, blank=True)
   

Juste 1 ou 2 remarques : Django génère automatiquement les id de clé primaire. Il n'est pas non plus obligatoire de donner les noms de table, django le génère à partir du nom du modèle.

J'espère que ca aide un peu

Hors ligne

Pied de page des forums