我有一个Shops模型,希望每个商店都能登录我的应用程序。我尽可能地在http://scottbarnham.com/blog/2008/08/21/extending-the-django-user-model-with-inheritance/以及其他各种Google搜索引导,我已经有了部分路线,但我遇到了一个问题。当我尝试作为商店登录时,我收到以下错误:
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。有谁知道我哪里出错了?
答案 0 :(得分:2)
“我已经同步了数据库,所以肯定应该将列设为user_ptr_id。”
是什么让你这么想?特别是根据这一明确的陈述in the docs for syncdb:
Syncdb不会改变现有的表
syncdb只会为其创建表 还没有的模型 安装。它永远不会发出ALTER TABLE语句以匹配所做的更改 安装后到模型类。 对模型类和数据库的更改 模式通常涉及某种形式 模棱两可,在这些情况下,Django 将不得不猜测正确 改变。存在风险 关键数据将丢失 过程
如果您对模型进行了更改 并希望改变数据库表 要匹配,请使用sql命令 显示新的SQL结构和 将其与现有表格进行比较 模式来计算更改。
答案 1 :(得分:1)
听起来好像你有一个现有的商店表,然后再将它改为继承自User(如Daniel所说),而syncdb不会更新现有表的模式。
如果可能,您需要删除表,然后运行syncdb。否则,如果您知道如何操作,则需要进入数据库并手动添加user_ptr_id字段。定义应如下所示:
"user_ptr_id" integer NOT NULL UNIQUE REFERENCES "auth_user" ("id")