Vous n'êtes pas identifié(e).
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
(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 )
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
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