【问题标题】:ValueError: "<User: >" needs to have a value for field "id" before this many-to-many relationship can be used?ValueError: "<User: >" 需要有一个字段 "id" 的值才能使用这种多对多关系?
【发布时间】:2021-03-26 02:59:09
【问题描述】:

我已经创建了自定义用户模型。

class User(AbstractUser):
    mobile = models.CharField(validators=[RegexValidator(regex="^\d{11}$", message="Length has to be 11", code="nomatch")], max_length=11)

is_superuser为0,is_staff为1的用户登录后,该有添加用户权限的用户在执行添加用户操作时,出现如下错误。

Traceback (most recent call last):
  File "/home/hhao/.virtualenvs/dd_demo/lib/python3.7/site-packages/django/core/handlers/exception.py", line 47, in inner
    response = get_response(request)
  File "/home/hhao/.virtualenvs/dd_demo/lib/python3.7/site-packages/django/core/handlers/base.py", line 204, in _get_response
    response = response.render()
  File "/home/hhao/.virtualenvs/dd_demo/lib/python3.7/site-packages/django/template/response.py", line 105, in render
    self.content = self.rendered_content
  File "/home/hhao/.virtualenvs/dd_demo/lib/python3.7/site-packages/django/template/response.py", line 83, in rendered_content
    return template.render(context, self._request)
  File "/home/hhao/.virtualenvs/dd_demo/lib/python3.7/site-packages/django/template/backends/django.py", line 61, in render
    return self.template.render(context)
  File "/home/hhao/.virtualenvs/dd_demo/lib/python3.7/site-packages/django/template/base.py", line 170, in render
    return self._render(context)
  File "/home/hhao/.virtualenvs/dd_demo/lib/python3.7/site-packages/django/template/base.py", line 162, in _render
    return self.nodelist.render(context)
  File "/home/hhao/.virtualenvs/dd_demo/lib/python3.7/site-packages/django/template/base.py", line 938, in render
    bit = node.render_annotated(context)
  File "/home/hhao/.virtualenvs/dd_demo/lib/python3.7/site-packages/django/template/base.py", line 905, in render_annotated
    return self.render(context)
  File "/home/hhao/.virtualenvs/dd_demo/lib/python3.7/site-packages/django/template/loader_tags.py", line 150, in render
    return compiled_parent._render(context)
  File "/home/hhao/.virtualenvs/dd_demo/lib/python3.7/site-packages/django/template/base.py", line 162, in _render
    return self.nodelist.render(context)
  File "/home/hhao/.virtualenvs/dd_demo/lib/python3.7/site-packages/django/template/base.py", line 938, in render
    bit = node.render_annotated(context)
  File "/home/hhao/.virtualenvs/dd_demo/lib/python3.7/site-packages/django/template/base.py", line 905, in render_annotated
    return self.render(context)
  File "/home/hhao/.virtualenvs/dd_demo/lib/python3.7/site-packages/django/template/loader_tags.py", line 150, in render
    return compiled_parent._render(context)
  File "/home/hhao/.virtualenvs/dd_demo/lib/python3.7/site-packages/django/template/base.py", line 162, in _render
    return self.nodelist.render(context)
  File "/home/hhao/.virtualenvs/dd_demo/lib/python3.7/site-packages/django/template/base.py", line 938, in render
    bit = node.render_annotated(context)
  File "/home/hhao/.virtualenvs/dd_demo/lib/python3.7/site-packages/django/template/base.py", line 905, in render_annotated
    return self.render(context)
  File "/home/hhao/.virtualenvs/dd_demo/lib/python3.7/site-packages/django/template/loader_tags.py", line 62, in render
    result = block.nodelist.render(context)
  File "/home/hhao/.virtualenvs/dd_demo/lib/python3.7/site-packages/django/template/base.py", line 938, in render
    bit = node.render_annotated(context)
  File "/home/hhao/.virtualenvs/dd_demo/lib/python3.7/site-packages/django/template/base.py", line 905, in render_annotated
    return self.render(context)
  File "/home/hhao/.virtualenvs/dd_demo/lib/python3.7/site-packages/django/template/loader_tags.py", line 62, in render
    result = block.nodelist.render(context)
  File "/home/hhao/.virtualenvs/dd_demo/lib/python3.7/site-packages/django/template/base.py", line 938, in render
    bit = node.render_annotated(context)
  File "/home/hhao/.virtualenvs/dd_demo/lib/python3.7/site-packages/django/template/base.py", line 905, in render_annotated
    return self.render(context)
  File "/home/hhao/.virtualenvs/dd_demo/lib/python3.7/site-packages/crispy_forms/templatetags/crispy_forms_tags.py", line 204, in render
    c = self.get_render(context).flatten()
  File "/home/hhao/.virtualenvs/dd_demo/lib/python3.7/site-packages/crispy_forms/templatetags/crispy_forms_tags.py", line 121, in get_render
    actual_form, node_context, template_pack=self.template_pack
  File "/home/hhao/.virtualenvs/dd_demo/lib/python3.7/site-packages/crispy_forms/helper.py", line 301, in render_layout
    html = self.layout.render(form, self.form_style, context, template_pack=template_pack)
  File "/home/hhao/.virtualenvs/dd_demo/lib/python3.7/site-packages/crispy_forms/layout.py", line 135, in render
    return self.get_rendered_fields(form, form_style, context, template_pack, **kwargs)
  File "/home/hhao/.virtualenvs/dd_demo/lib/python3.7/site-packages/crispy_forms/layout.py", line 98, in get_rendered_fields
    for field in self.fields
  File "/home/hhao/.virtualenvs/dd_demo/lib/python3.7/site-packages/crispy_forms/layout.py", line 98, in <genexpr>
    for field in self.fields
  File "/home/hhao/.virtualenvs/dd_demo/lib/python3.7/site-packages/crispy_forms/utils.py", line 66, in render_field
    return field.render(form, form_style, context, template_pack=template_pack)
  File "/home/hhao/.virtualenvs/dd_demo/lib/python3.7/site-packages/crispy_forms/layout.py", line 367, in render
    fields = self.get_rendered_fields(form, form_style, context, template_pack, **kwargs)
  File "/home/hhao/.virtualenvs/dd_demo/lib/python3.7/site-packages/crispy_forms/layout.py", line 98, in get_rendered_fields
    for field in self.fields
  File "/home/hhao/.virtualenvs/dd_demo/lib/python3.7/site-packages/crispy_forms/layout.py", line 98, in <genexpr>
    for field in self.fields
  File "/home/hhao/.virtualenvs/dd_demo/lib/python3.7/site-packages/crispy_forms/utils.py", line 66, in render_field
    return field.render(form, form_style, context, template_pack=template_pack)
  File "/home/hhao/.virtualenvs/dd_demo/lib/python3.7/site-packages/crispy_forms/layout.py", line 367, in render
    fields = self.get_rendered_fields(form, form_style, context, template_pack, **kwargs)
  File "/home/hhao/.virtualenvs/dd_demo/lib/python3.7/site-packages/crispy_forms/layout.py", line 98, in get_rendered_fields
    for field in self.fields
  File "/home/hhao/.virtualenvs/dd_demo/lib/python3.7/site-packages/crispy_forms/layout.py", line 98, in <genexpr>
    for field in self.fields
  File "/home/hhao/.virtualenvs/dd_demo/lib/python3.7/site-packages/crispy_forms/utils.py", line 66, in render_field
    return field.render(form, form_style, context, template_pack=template_pack)
  File "/home/hhao/.virtualenvs/dd_demo/lib/python3.7/site-packages/crispy_forms/layout.py", line 289, in render
    fields = self.get_rendered_fields(form, form_style, context, template_pack, **kwargs)
  File "/home/hhao/.virtualenvs/dd_demo/lib/python3.7/site-packages/crispy_forms/layout.py", line 98, in get_rendered_fields
    for field in self.fields
  File "/home/hhao/.virtualenvs/dd_demo/lib/python3.7/site-packages/crispy_forms/layout.py", line 98, in <genexpr>
    for field in self.fields
  File "/home/hhao/.virtualenvs/dd_demo/lib/python3.7/site-packages/crispy_forms/utils.py", line 66, in render_field
    return field.render(form, form_style, context, template_pack=template_pack)
  File "/home/hhao/.virtualenvs/dd_demo/lib/python3.7/site-packages/xadmin/views/edit.py", line 58, in render
    result = self.detail.get_field_result(field)
  File "/home/hhao/.virtualenvs/dd_demo/lib/python3.7/site-packages/xadmin/views/base.py", line 80, in method
    return filter_chain(filters, len(filters) - 1, _inner_method, *args, **kwargs)
  File "/home/hhao/.virtualenvs/dd_demo/lib/python3.7/site-packages/xadmin/views/base.py", line 63, in filter_chain
    return filter_chain(filters, token - 1, _inner_method, *args, **kwargs)
  File "/home/hhao/.virtualenvs/dd_demo/lib/python3.7/site-packages/xadmin/views/base.py", line 49, in filter_chain
    return func()
  File "/home/hhao/.virtualenvs/dd_demo/lib/python3.7/site-packages/xadmin/views/base.py", line 62, in _inner_method
    return fm(func if fargs[1] == '__' else func(), *args, **kwargs)
  File "/home/hhao/.virtualenvs/dd_demo/lib/python3.7/site-packages/xadmin/views/base.py", line 74, in _inner_method
    return func(self, *args, **kwargs)
  File "/home/hhao/.virtualenvs/dd_demo/lib/python3.7/site-packages/xadmin/views/detail.py", line 266, in get_field_result
    return ResultField(self.obj, field_name, self)
  File "/home/hhao/.virtualenvs/dd_demo/lib/python3.7/site-packages/xadmin/views/detail.py", line 75, in __init__
    self.init()
  File "/home/hhao/.virtualenvs/dd_demo/lib/python3.7/site-packages/xadmin/views/detail.py", line 84, in init
    self.field_name, self.obj, self.admin_view)
  File "/home/hhao/.virtualenvs/dd_demo/lib/python3.7/site-packages/xadmin/util.py", line 312, in lookup_field
    value = getattr(obj, name)
  File "/home/hhao/.virtualenvs/dd_demo/lib/python3.7/site-packages/django/db/models/fields/related_descriptors.py", line 536, in __get__
    return self.related_manager_cls(instance)
  File "/home/hhao/.virtualenvs/dd_demo/lib/python3.7/site-packages/django/db/models/fields/related_descriptors.py", line 853, in __init__
    (instance, self.pk_field_names[self.source_field_name]))
ValueError: "<User: >" needs to have a value for field "id" before this many-to-many relationship can be used.

我刚刚创建了用户模型并启动了django,不知道发生了什么,django的版本是3.0.6,xadmin的版本是2.0.1。

后来我在django的版本是1.11.11,xadmin的版本是0.6.1的时候进行了上述操作,添加用户的操作是正常执行的。

请帮我解决这个问题,非常感谢!

【问题讨论】:

  • 请将错误的完整堆栈跟踪添加到您的问题中。
  • 已修改,请看

标签: python-3.x django django-admin


【解决方案1】:

如果您想要自定义用户模型,您应该使用 AbstractBaseUser。不是 AbstractUser

【讨论】:

  • 我需要 AbstractUser 的属性和方法,只添加其他属性,所以我的自定义 User 模型仍然使用 AbstractBaseUser,而不是 AbstractUser?感谢您的回答。
猜你喜欢
  • 1970-01-01
  • 2020-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-01
相关资源
最近更新 更多