2015-06-29 2 views
4

Я пытаюсь взаимодействовать с сервером разработки для моего проекта django. Однако любая страница на сервере возвращает ту же ошибку:столбец <column> не существует (Django 1.8)

Exception Type: ProgrammingError 

Exception Value: column myApp_verb.date does not exist 

я не недавно добавил дату поля к модели глагола (это было там некоторое время, и я не уверен, что вызвало эту ошибку, чтобы начать). Мои коллаборационисты имеют одинаковые файлы на своих локальных машинах, и ни у кого из них нет никаких проблем.

Я пробовал различные вещи:

Я попытался удалить поле даты (и все ссылки на него). makemigrations не обнаружили каких-либо изменений, и migrate неудачу с ошибкой:

django.db.utils.ProgrammingError: column "date" does not exist

Я попытался переименовать поле. Еще раз makemigrations не обнаружил никаких изменений, и миграция завершилась с той же ошибкой, что и выше.

Я пробовал удалить все мои миграции. Это ничего не изменило.

У меня нет идей на этом этапе. Любая помощь приветствуется.

Заранее благодарен!

Редактировать: Вот класс глагола, по запросу. Его довольно просто:

class Verb(models.Model): 
    english_gloss = models.CharField(max_length = 20) 
    first_person = models.CharField(max_length = 20) 
    second_person = models.CharField(max_length = 20) 
    third_person = models.CharField(max_length = 20) 
    fourth_person = models.CharField(max_length = 20) 
    transitivity = models.BooleanField() 
    classifier = models.CharField(max_length = 20) 
    inner_lexical = models.CharField(max_length = 20) 
    outer_lexical = models.CharField(max_length = 20) 
    perfective = models.CharField(max_length = 20) 
    imperfective = models.CharField(max_length = 20) 
    date = models.DateTimeField(auto_now_add = True) 
+0

Вам нужно поделиться некоторым кодом, чтобы получить помощь. – Wtower

+0

Могу ли я увидеть модель для «глагола»? – NightShadeQueen

+0

@NightShadeQueen Я добавил его сейчас – acrane

ответ

2

Я до сих пор не знаю, почему эта ошибка началась, но похоже, что в моей базе данных произошел какой-то ущерб. Я отключил db и начал новый, и все работает отлично.

+0

Ну, ну, трюк заключается в том, чтобы не создавать новую базу данных :) –

3

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

Первый комментарий вне coloumn (s), которые бросают ошибку.

Затем напишите ручную миграцию. Обычно что-то вроде этого:

# -*- coding: utf-8 -*- 
from __future__ import unicode_literals 
from django.db import migrations, models  

class Migration(migrations.Migration): 

    dependencies = [ 
     ('my_field', 'last_migration_filename'), # no .py 
    ]   

    operations = [ 
     migrations.AddField(
      model_name='my_model', 
      name='my_field', 
      field=models.MyField(blank=True, null=True), 
     ), 
    ] 

Затем запустить python manage.py migrate. Он создаст это/эти поля.

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

Работал для меня как шарм.

1

Было такое же проблема. Я хотел добавить поле «slug» к модели City.

Ошибка исчезла, когда я временно прокомментировал строку с select_related ('city').

for location in Location.objects.filter().select_related('city'): 
    cities[str(l.id)] = l.city.id 

Стек след указал мне на этот мир кода:

File "/www/loorn/apps/users/widgets.py", line 69, in LocationSelect 
    for location in Location.objects.filter().select_related('city'): 
1

Полностью согласен с Озер S. Да, это единственное решение, чтобы преодолеть эту проблему. Уважаемые разработчики Django, почему при попытке добавить поле в существующую таблицу Django неожиданно отвечает, что такого поля не существует?Конечно, этого не существует, поэтому я пытаюсь добавить его!

То же самое решение для моего случая - добавить поле с множественным выбором:

  1. Это то, что добавленное поле в models.py выглядит следующим образом:

    TEMPLATE = (
        ('list', 'List'), ('table', 'Table') 
    ) 
    template = models.CharField(
        'View template', 
        choices=TEMPLATE, 
        max_length=7, 
        default='list' 
    ) 
    
  2. Создать вручную файл миграции с номером, следующим за предыдущей миграцией. Я добавляю поле «шаблон» в таблицу «blogcategory» в приложении «блог», а мой файл миграции называется «0005_template».

  3. И это содержимое файла миграции (0005_template.py):

    # -*- coding: utf-8 -*- 
    from django.db import migrations, models 
    
    class Migration(migrations.Migration): 
    dependencies = [ 
        ('blog', '0004_auto_20170628_1533'), 
    ] 
    
    operations = [ 
        migrations.AddField(
         model_name='blogcategory', 
         name='template', 
         field=models.CharField(
          verbose_name='View template', 
          choices=[('list', 'List'), ('table', 'Table')], 
          max_length=7, 
          default='list' 
         ), 
        ), 
    ] 
    
  4. Далее, комментарий по этой линии в модели:

    TEMPLATE = (
        ('list', 'List'), ('table', 'Table') 
    ) 
    template = models.CharField(
        'View template', 
        choices=TEMPLATE, 
        max_length=7, 
        default='list' 
    ) 
    
  5. Затем, сделайте миграции приложений в базе данных:

    python manage.py migrate blog 
    

    и получите

    Operations to perform: 
        Apply all migrations: blog 
    Running migrations: 
        Applying blog.0005_template... OK 
    

В результате поле «шаблон» с «список» по умолчанию был добавлен ко всем записям в «blogcategory» стол.

P.S. Не забывайте раскомментировать поле в модели.

0

У меня была эта проблема. Я исправил это, перейдя в таблицу миграции Django в базе данных и обнаружив неисправность миграции. В моем случае это была довольно недавняя миграция. Я удалил эту миграцию и другие, следующие за ней. Затем повторили прогон python manage.py makemigrations и python manage.py migrate. На этот раз обе команды побежали, и ошибка исчезла.

Смежные вопросы