Django Models (1054, «Неизвестный столбец в« списке полей ») - PullRequest
34 голосов
/ 24 сентября 2010

Понятия не имею, почему появляется эта ошибка.Вот модели, которые я создал -

from django.db import models
from django.contrib.auth.models import User

class Shows(models.Model):
    showid= models.CharField(max_length=10, unique=True, db_index=True)
    name  = models.CharField(max_length=256, db_index=True)
    aka   = models.CharField(max_length=256, db_index=True)
    score = models.FloatField()

class UserShow(models.Model):
    user  = models.ForeignKey(User)
    show  = models.ForeignKey(Shows)

Вот вид, с которого я получаю доступ к этим моделям -

from django.http import HttpResponse
from django.template import Context
from django.template.loader import get_template
from django.http import HttpResponse, Http404
from django.contrib.auth.models import User

def user_page(request, username):
    try:
        user = User.objects.get(username=username)
    except:
        raise Http404('Requested user not found.')

    shows     = user.usershow_set.all()
    template  = get_template('user_page.html')
    variables = Context({
        'username': username,
        'shows'   : shows})
    output = template.render(variables)
    return HttpResponse(output)

В этот момент я получаю сообщение об ошибке -

OperationalError: (1054, "Неизвестный столбец 'appname_usershow.show_id' в 'списке полей'")

Как вы видите, этот столбец даже не присутствует в моих моделях?Почему эта ошибка?

Ответы [ 9 ]

27 голосов
/ 08 ноября 2010

может быть, схема ваших таблиц была изменена? Кроме того, запуск syncdb не обновляет уже созданные таблицы.

Возможно, вам придется удалить все таблицы, а затем снова запустить syncdb. Также не забудьте взять резервную копию ваших данных !!

13 голосов
/ 29 сентября 2010

Как @inception сказал, что моя схема таблиц изменилась и работает syncdb не обновляет уже созданные таблицы.

Очевидно, что любые изменения в моделях при обновлении через syncdb не изменяют (как при обновлении / изменении) фактические таблицы. Поэтому я сбросил соответствующую БД и запустил syncdb на пустой БД. Теперь работает нормально. :)

Для других, SOUTH инструмент миграции данных для Django, кажется, любимый вариант. Кажется, он предоставляет опции, которые не подходят для моделей django и syncdb. Должен проверить ...

5 голосов
/ 24 сентября 2010

Обычно я получаю это, когда пытаюсь получить доступ к полю, которого нет в базе данных.

Проверьте, существует ли поле в базе данных. Если вы измените модель и выполните syncdb, это не обновит базу данных, я не уверен, что это так.

С другой стороны, Django предлагает ярлык для замены блока try / Кроме кода в вашем коде, используя get_object_or_404 (доступно в django.shortcuts)

try:
     user = User.objects.get(username=username)
except:
     raise Http404('Requested user not found.')

можно изменить на:

user = get_object_or_404(User, username=username)
3 голосов
/ 07 октября 2013

Я встречал те же проблемы:

Сначала запустите

manage.py sqlall [appname]

и вы можете найти:

`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,

и я добавляю руководство к колонке:

ALTER TABLE tb_realtime_data ADD id integer AUTO_INCREMENT NOT NULL PRIMARY KEY FIRST;

и тогда это сработало.

Я думаю, что django добавит столбец с именем id.

Для удобства каждой модели присваивается поле первичного ключа с автоинкрементом с именем id, если вы не указали в поле primary_key = True (см. Раздел «Автозаполнение» в Приложении A).

Вы можете нажать здесь для получения подробной информации.

Удачи.

2 голосов
/ 03 ноября 2014

В соответствующем поле явно указать

primary_key = True
1 голос
/ 05 октября 2018

Это довольно старый вопрос, но в любом случае вам может пригодиться следующее: Проверьте базу данных, вам, скорее всего, не хватает show_id в таблице appname_usershow.

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

OR

Когда вы получаете доступ к неуправляемой таблице и пытаетесь добавить ForeignKey к вашей модели. Следуя приведенному выше примеру:

class UserShow(models.Model):
    # some attributes ...
    show = models.ForeignKey(Show, models.DO_NOTHING)

    class Meta:
        managed = False
        db_table = 'appname_departments'
0 голосов
/ 11 декабря 2017

Прямым решением является удаление файлов в папке ../Project/App/migrations, и способ избежать этой проблемы - создать новый столбец таблицы данных вместо того, чтобы изменить существующий.

0 голосов
/ 22 февраля 2017

Я получил эту ошибку при попытке использовать сериализаторы Django Rest Framework. Убедитесь, что у вас есть сериализатор, который подклассов ModelSerializer, что вы переносите любые изменения в Модели, прежде чем писать классы сериализатора (или просто комментируйте все, что связано с сериализатором, мигрируйте, затем раскомментируйте).

0 голосов
/ 10 сентября 2013

Я создал файл модели для своего приложения, а затем сделал несколько sqlall, уточняя таблицы. Одно из изменений, которые я сделал, я установил primary_key=True для одного из моих полей. В конце призвал к syncdb. Добавил фиктивное значение и попытался получить к нему доступ, указав User.objects.all(), User - мой класс модели. Хотя это работало нормально, эта ошибка возникала при печати списка, возвращаемого вызовом all(). Это читать DatabaseError: (1054, "Unknown column 'polls_user.id' in 'field list'")

Удивительно, но я попытался разрешить его с помощью другого вызова syncdb. Я помню, что ни разу не видел столбец id в таблице на протяжении всего упражнения, когда проверял его через клиент командной строки mysql.

...