【问题标题】:Django Abstract User "too many values to unpack"Django 抽象用户“解包的值太多”
【发布时间】:2016-04-02 22:24:44
【问题描述】:

我一直在尝试使用 AbstractUser 向标准 django 用户添加一些字段。然而,在进行动议时,我遇到了一个问题。当我尝试进行迁移时,会导致“值错误:要解包的值太多”。

这是我的代码:

models.py

class TeamMember(AbstractUser):
    YEAR_LEVELS = (
            ('1', '1st'),
            ('2', '2nd'),
            ('3', '3rd'),
            ('4', '4th'),
            ('5', '5th'),
            ('0', 'Other'),
    )

    SAILING_LEVELS = (
            ('1', 'Beginner'),
            ('2', 'Intermediate'),
            ('3', 'Race'),
    )
    year_level = models.CharField(max_length = 1, choices=YEAR_LEVELS)
    sailing_level = models.CharField(max_length = 1, choices=SAILING_LEVELS)
    board_pos = models.CharField(max_length = 50)
    avatar = models.URLField()

settings.py

AUTH_USER_MODEL = 'main.models.Users'
SOCIAL_AUTH_USER_MODEL = 'main.models.TeamMember'

我也在使用 python-social-auth,这是 settings.py 文件中第二行的用途。

【问题讨论】:

  • 当你得到一个异常,例如“Value Error: too many values to unpack”,Python会告诉你文件中发生错误的行。这是解决问题的起点,如果您不分享这些细节,没有人可以帮助您。
  • 我不会搞砸 AbstractUser。只需通过 OneToOne 将 Teammember 模型绑定到 Django 的普通用户模型即可。
  • 我添加了from .models import User,并将其更改为AUTH_USER_MODEL = 'main.Users' 以解决此问题。

标签: django django-models python-social-auth


【解决方案1】:

在 Django 包中,django/db/models/utils.py 采用“app_label.ModelName”形式的模型或字符串并返回相应的 ("app_label", "modelname") 元组。它使用代码解包:

app_label, model_name = model.split(".")

现在您的 AUTH_USER_MODEL 是“main.models.Users”。在model.split(".") 执行时,list 包含三个元素,并且分配给两个变量,即 app_label 和 model_name。

尝试根据("app_label", "modelname")给AUTH_USER_MODEL "Users.User"

【讨论】:

    【解决方案2】:

    我构建了一个 AUTH_USER_MODEL,但我遇到了这个错误:

    app_label, model_name = model.split(".")
    

    错误是路径,我的应用程序位于应用程序文件夹中,我的 AUTH_USER_MODEL 是:

    AUTH_USER_MODEL = 'user.User'
    

    【讨论】:

      猜你喜欢
      • 2019-06-07
      • 2012-02-15
      • 1970-01-01
      • 2017-10-17
      • 2010-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-11
      相关资源
      最近更新 更多