ошибка целостности django, я знаю почему, но не знаю как решить

Я изменил свою прежнюю пользовательскую модель, так что теперь она наследуется от пользовательской модели django.

from django.contrib.auth.models import User

class UserProfile(User):
 #fields..

но другие модели указывали на мою бывшую модель, и теперь, если я хочу мигрировать, я получаю сообщение об ошибке:

(user_id)=(9) does not exist in auth_user table. 

разумное сообщение об ошибке. Но что мне теперь делать? я действительно застрял. я использую django версии 1.4

Сделал скриншот ошибки:

введите здесь описание изображения


person doniyor    schedule 31.07.2013    source источник


Ответы (1)


Вы не говорите, какую версию Django вы используете; если вы используете 1.5, вам также необходимо установить параметр AUTH_USER_MODEL, чтобы указать Django использовать его (см. документы аутентификации для получения дополнительной информации). Если вы используете более раннюю версию, вы, вероятно, вообще не хотите создавать подкласс модели User, а создадите профиль (как указывает имя вашего класса) как отдельную модель и свяжите его с ForeignKey (см. документы старого профиля, чтобы узнать больше об этом).

Вы также изменили имя модели, когда добавили родительский класс? Вероятно, вы захотите установить имя таблицы в UserProfile так, чтобы оно соответствовало старому имени. Из документов модели Django:

Чтобы сэкономить ваше время, Django автоматически получает имя таблицы базы данных из имени класса вашей модели и приложения, которое его содержит. Имя таблицы базы данных модели создается путем присоединения «метки приложения» модели — имени, которое вы использовали в manage.py startapp — к имени класса модели с символом подчеркивания между ними.

Например, если у вас есть книжный магазин приложений (созданный с помощью manage.py startapp bookstore), модель, определенная как класс Book, будет иметь таблицу базы данных с именем bookstore_book.

Чтобы переопределить имя таблицы базы данных, используйте параметр db_table в классе Meta.

Так что что-то вроде этого сделает свое дело:

class UserProfile(User):
    # other stuff
    class Meta:
        db_table = "myapp_user"

Надеюсь это поможет!

person Paul    schedule 31.07.2013
comment
Спасибо, Павел, отличная помощь. я думал, что подклассы и установка внешнего ключа - это одно и то же. я использую джанго1.4 - person doniyor; 01.08.2013