Создание пользовательских пользовательских интерфейсов в Django - PullRequest
0 голосов
/ 25 февраля 2011

У меня есть модель магазинов, и я хотел бы, чтобы каждый магазин мог войти в мое приложение. Следуя как можно лучше справочнику по номеру http://scottbarnham.com/blog/2008/08/21/extending-the-django-user-model-with-inheritance/ и различным другим поисковым запросам, я получил часть пути, но столкнулся с проблемой. Когда я пытаюсь войти как магазин, я получаю следующую ошибку:

OperationalError at /login/
(1054, "Unknown column 'shops.user_ptr_id' in 'field list'")

Модель магазина:

class Shops(User):
  shop_id = models.AutoField(primary_key=True)
  shop_code = models.CharField(unique=True, max_length=5)
  shop_type_fk = models.ForeignKey(ShopTypes,
                                   null=True,
                                   db_column='shop_type_id',
                                   blank=True)
  address_fk = models.ForeignKey(Addresses, db_column='address_id')
  phone_number = models.CharField(max_length=30)
  #email = models.EmailField(max_length=255, blank=True)
  description = models.TextField(blank=True)
  does_gift_aid = models.NullBooleanField(null=True, blank=True)
  objects = UserManager()
  class Meta:
    db_table = u'shops'

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

Ответы [ 2 ]

2 голосов
/ 25 февраля 2011

"Я синхронизировал базу данных, поэтому наверняка она должна была составить столбец user_ptr_id."

Что заставляет тебя так думать? Особенно в свете этого четкого утверждения в документах для syncdb :

Syncdb не изменит существующие таблицы

syncdb будет создавать таблицы только для модели, которые еще не были установлены. Это никогда не выдаст ALTER ТАБЛИЦА операторов, чтобы соответствовать внесенным изменениям к модельному классу после установки. Изменения в модельных классах и базе данных схемы часто включают в себя некоторую форму двусмысленность и, в этих случаях, Джанго придется угадывать на правильном внести изменения. Существует риск того, что критические данные будут потеряны в процесс.

Если вы внесли изменения в модель и хотите изменить таблицы базы данных чтобы соответствовать, используйте команду sql для отобразить новую структуру SQL и сравните это с вашей существующей таблицей схема для разработки изменений.

1 голос
/ 25 февраля 2011

Похоже, что у вас была существующая таблица магазинов до того, как вы изменили ее на наследование от пользователя (как отмечает Даниэль), и syncdb не обновляет схему для существующих таблиц.

Вам необходимо удалить таблицу и затем запустить syncdb, если это возможно. В противном случае вам нужно зайти в свою базу данных и вручную добавить поле user_ptr_id, если вы знаете, как это сделать. Определение должно выглядеть примерно так:

"user_ptr_id" integer NOT NULL UNIQUE REFERENCES "auth_user" ("id")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...