Ошибка «неизвестный столбец X.id» в django с использованием существующей БД - PullRequest
8 голосов
/ 16 ноября 2010

Я пытаюсь создать модель для существующей БД. Используя вывод manage.py inspectdb, мой models.py файл выглядит так:

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'

Когда я пытаюсь сделать Scripts.objects.all(), я получаю

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'")

Почему Джанго считает, что должен быть столбец scripts.id? Как я могу это исправить без сбрасывания таблиц и т. Д.

Ответы [ 2 ]

14 голосов
/ 16 ноября 2010

По умолчанию всегда есть поле неявное id в качестве автоинкрементного первичного ключа для каждой модели. См. primary_key в Django docs , как изменить это поле на другое имя, но должен быть один первичный ключ (также в вашей таблице).

Также вы можете не захотеть называть одно из ваших полей super, так как оно скрывает встроенный в Python super в теле класса. Может быть, когда-нибудь вам будет трудно найти ошибку.

0 голосов
/ 16 ноября 2010

Я не уверен, что вы знакомы с django-south?

Это симпатичный небольшой инструмент, который помогает переносить данные из одной структуры в другую, а также помогает идентифицироватьпроблемы перед передачей информации в таблицу, что приводит к уменьшению количества ошибок и последующей отладке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...