【问题标题】:Creating Custom User Backends in Django在 Django 中创建自定义用户后端
【发布时间】:2011-07-04 09:58:11
【问题描述】:

我有一个 Shops 模型,并且希望每个商店都能够登录到我的应用程序。尽我所能遵循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 列。有谁知道我哪里出错了?

【问题讨论】:

    标签: django inheritance model


    【解决方案1】:

    “我已经同步了数据库,所以它肯定应该创建了 user_ptr_id 列。”

    是什么让你这么想?尤其是鉴于这个明确的声明in the docs for syncdb

    Syncdb 不会改变现有的表

    syncdb 只会为 尚未上市的车型 安装。它永远不会发出 ALTER 用于匹配所做更改的 TABLE 语句 安装后到模型类。 对模型类和数据库的更改 图式通常涉及某种形式的 模棱两可,在这种情况下,Django 将不得不猜测正确的 要做出的改变。有一个风险是 关键数据将丢失在 过程。

    如果您对模型进行了更改 并希望更改数据库表 要匹配,使用sql命令 显示新的 SQL 结构和 将其与您现有的表格进行比较 架构来制定更改。

    【讨论】:

      【解决方案2】:

      听起来您在将其更改为从 User 继承之前拥有一个现有的 stores 表(如 Daniel 所说),并且 syncdb 不会更新现有表的架构。

      如果可能,您需要删除表,然后运行 ​​syncdb。否则,您需要进入数据库并手动添加 user_ptr_id 字段,如果您知道该怎么做的话。定义应如下所示:

      "user_ptr_id" integer NOT NULL UNIQUE REFERENCES "auth_user" ("id")
      

      【讨论】:

        猜你喜欢
        • 2019-03-31
        • 2012-05-18
        • 1970-01-01
        • 2013-11-15
        • 2018-08-12
        • 1970-01-01
        • 1970-01-01
        • 2018-05-21
        • 2014-03-24
        相关资源
        最近更新 更多