2010-11-16 6 views
7

Estoy intentando crear un modelo para una base de datos existente. Uso de la salida de manage.py inspectdb, Mi archivo models.py se ve así:error "columna desconocida X.id" en django utilizando DB existente

from django.db import models 

...some more stuff here... 

class Scripts(models.Model): 
    run_site = models.ForeignKey(Sites, db_column='run_site') 
    script_name = models.CharField(max_length=120) 
    module_name = models.CharField(unique=True, max_length=120) 
    type = models.CharField(max_length=24) 
    cat_name = models.CharField(max_length=90) 
    owner = models.ForeignKey(QAPeople, db_column='owner') 
    only_server = models.CharField(max_length=120, blank=True) 
    guest = models.IntegerField() 
    registered = models.IntegerField() 
    super = models.IntegerField() 
    admin = models.IntegerField() 
    run_timing = models.CharField(max_length=27) 
    manual_owner = models.ForeignKey(QAPeople, db_column='manual_owner') 
    script_id = models.IntegerField(unique=True,) 
    version = models.IntegerField() 
    comment = models.ForeignKey('ScriptComments', null=True, blank=True) 
    class Meta: 
     db_table = u'scripts' 

cuando intento hacer Scripts.objects.all() consigo

Traceback (most recent call last): 
    File "<console>", line 1, in <module> 
    File "C:\Python26\lib\site-packages\django\db\models\query.py", line 68, in __repr__ 
    data = list(self[:REPR_OUTPUT_SIZE + 1]) 
    File "C:\Python26\lib\site-packages\django\db\models\query.py", line 83, in __len__ 
    self._result_cache.extend(list(self._iter)) 
    File "C:\Python26\lib\site-packages\django\db\models\query.py", line 269, in iterator 
    for row in compiler.results_iter(): 
    File "C:\Python26\lib\site-packages\django\db\models\sql\compiler.py", line 672, in results_iter 
    for rows in self.execute_sql(MULTI): 
    File "C:\Python26\lib\site-packages\django\db\models\sql\compiler.py", line 727, in execute_sql 
    cursor.execute(sql, params) 
    File "C:\Python26\lib\site-packages\django\db\backends\util.py", line 15, in execute 
    return self.cursor.execute(sql, params) 
    File "C:\Python26\lib\site-packages\django\db\backends\mysql\base.py", line 86, in execute 
    return self.cursor.execute(query, args) 
    File "C:\Python26\lib\site-packages\MySQLdb\cursors.py", line 173, in execute 
    self.errorhandler(self, exc, value) 
    File "C:\Python26\lib\site-packages\MySQLdb\connections.py", line 36, in defaulterrorhandler 
    raise errorclass, errorvalue 
OperationalError: (1054, "Unknown column 'scripts.id' in 'field list'") 

¿Por qué Django creo que debería ser una columna scripts.id? ¿Cómo lo arreglo sin dejando caer las tablas, etc.?

Respuesta

12

Siempre hay un implicit id field as auto incrementing primary key predeterminado en cada modelo. Consulte primary_key in the Django docs cómo cambiar ese campo a otro nombre, pero debe haber una clave principal (también en su tabla).

También es posible que no desee llamar a uno de sus campos super, ya que está sombreando el super incorporado de Python en el cuerpo de la clase. Puede que te cueste encontrar un error algún día.

+1

Es por eso que es un buen hábito usar 'model.pk' para referirse a la clave principal en lugar de' model.id'. –

0

no estoy seguro si'r familiarizado con django-south?

Es una pequeña herramienta agradable que ayuda a migrar sus datos de una estructura a otra y también ayuda a identificar problemas antes de comprometerse a la mesa de información, causando menos errores y depuración después.

+0

Este enlace está roto. Esta es la nueva: http://south.readthedocs.io/en/latest/ –

Cuestiones relacionadas