Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Django
  • » django.db.utils.ProgrammingError: relation "cities" already exists - разобрался, как побороть, но не понимаю, откуда корни растут. [RSS Feed]

#1 Авг. 20, 2015 16:34:17

TitanFighter
Зарегистрирован: 2015-06-23
Сообщения: 99
Репутация: +  0  -
Профиль   Отправить e-mail  

django.db.utils.ProgrammingError: relation "cities" already exists - разобрался, как побороть, но не понимаю, откуда корни растут.

День добрый.

Имею модель

from django.db import models
class Country(models.Model):
    country_name = models.CharField(max_length = 60, db_index = True, unique = True)
    class Meta:
        db_table = 'country'
class City(models.Model):
    city_name = models.CharField(max_length = 30, db_index = True, unique = True)
    city_country = models.ForeignKey(Country)
    class Meta:
        db_table = 'city'
class PlaceType(models.Model):
    placetype_name = models.CharField(max_length = 25, blank = True, unique = True)
    class Meta:
        db_table = 'place_type'
class Place(models.Model):
    place_name = models.CharField(max_length = 50, db_index = True)
    place_street = models.CharField(max_length = 80)
    place_phone = models.CharField(max_length = 60)
    place_official_site = models.URLField(max_length = 255, blank = True)
    place_country = models.ForeignKey(Country)
    place_city = models.ForeignKey(City)
    place_type = models.ForeignKey(PlaceType)
    class Meta:
        db_table = 'place'
        unique_together = (('place_name', 'place_street'))

Дропаю БД\удаляю папку миграций
Если делаю согласно последовательности, как в туториале, т.е.:
1) manage.py migrate
2) makemigrations app_place
3) manage.py migrate
то получаю ошибку: django.db.utils.ProgrammingError: relation “cities” already exists

Если же, опять дропаю БД\удаляю папку миграций и делаю:
1) makemigrations app_place
2) manage.py migrate
То ошибки никакой нету.

Если к этому добавить:
3) внести какие то изменения в модель
4) makemigrations app_place
5) manage.py migrate
Опять выскакивает ошибка
Не могу понять, почему выскакивает ошибка?

Едит:
Экспериментально узнал, что это как то связано с
class Meta:
db_table = ‘city’
Но как - пока еще загадка.

Отредактировано TitanFighter (Авг. 20, 2015 16:48:17)

Офлайн

#2 Авг. 20, 2015 16:58:42

bs0d
Зарегистрирован: 2014-02-01
Сообщения: 76
Репутация: +  2  -
Профиль   Отправить e-mail  

django.db.utils.ProgrammingError: relation "cities" already exists - разобрался, как побороть, но не понимаю, откуда корни растут.

Врядли это как-то связано с названием таблицы. Как именно дропаете БД?
В туториале разве не syncdb -> makemigrations -> migrate ?
Ну и первое что пришло на ум:
Заменить

place_city = models.ForeignKey(City)
на
place_gorod = models.ForeignKey(City)
(чисто для примера)

Отредактировано bs0d (Авг. 20, 2015 17:00:53)

Офлайн

#3 Авг. 20, 2015 17:08:22

TitanFighter
Зарегистрирован: 2015-06-23
Сообщения: 99
Репутация: +  0  -
Профиль   Отправить e-mail  

django.db.utils.ProgrammingError: relation "cities" already exists - разобрался, как побороть, но не понимаю, откуда корни растут.

Дропал БД через pgAdmin - всю ветку public дропал каскадно и создавал заново.

После долгого гугления и от безысходности решил ребутнуть Убунту - эврика!!! Миграция перестала эррорить.
Перед этим я пробовал sudo /etc/init.d/postgresql restart в надежде, что постргес где-то выделывается, но не в нем дело. Идей, где еще мог быть глюк, пока нету.

Если у кого-то был такой же глюк, прошу отписаться с решением, как побороли (откуда глюк?).

Отредактировано TitanFighter (Авг. 20, 2015 17:25:59)

Офлайн

  • Начало
  • » Django
  • » django.db.utils.ProgrammingError: relation "cities" already exists - разобрался, как побороть, но не понимаю, откуда корни растут.[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version