【问题标题】:Django request.user not working when using auth_user_model in models.py在models.py中使用auth_user_model时Django request.user不工作
【发布时间】:2021-09-28 21:58:54
【问题描述】:

我通过导入设置并通过 AUTH_USER_MODEL 在我的 models.py 中使用用户模型(这是一个自定义模型),但在我看来,request.user 似乎没有被识别为用户类。

这是模型

from django.db import models
from django.conf import settings
from django.utils import timezone

User = settings.AUTH_USER_MODEL


class Site(models.Model):
    name = models.CharField(
        max_length=100,
    )
    slug = models.SlugField(max_length=20)
    admin = models.ForeignKey(
        User,
        related_name="administrators",
        on_delete=models.SET_NULL,
        blank=True,
        null=True,
    )
    people = models.ManyToManyField(User)

    def __str__(self):
        return self.name

这里是视图中的逻辑

def create_site(request):
user = request.user
print(user)
form = CreateSiteForm(
    request.POST or None,
    initial={
        "admin": user,
    },
)
if form.is_valid():
    form.save()
    return redirect("projects")

context = {
    "form": form,
}
return render(request, "tracking/create-site.html", context)

这是来自终端的错误

       return self.is_bound and not self.errors
  File "C:\Users\Papis\Desktop\Dev\projects\lib\site-packages\django\forms\forms.py", line 170, in errors
    self.full_clean()
  File "C:\Users\Papis\Desktop\Dev\projects\lib\site-packages\django\forms\forms.py", line 374, in full_clean
    self._post_clean()
  File "C:\Users\Papis\Desktop\Dev\projects\lib\site-packages\django\forms\models.py", line 408, in _post_clean
    self.instance = construct_instance(self, self.instance, opts.fields, opts.exclude)
  File "C:\Users\Papis\Desktop\Dev\projects\lib\site-packages\django\forms\models.py", line 63, in construct_instance
    f.save_form_data(instance, cleaned_data[f.name])
  File "C:\Users\Papis\Desktop\Dev\projects\lib\site-packages\django\db\models\fields\__init__.py", line 910, in save_form_data
    setattr(instance, self.name, data)
  File "C:\Users\Papis\Desktop\Dev\projects\lib\site-packages\django\db\models\fields\related_descriptors.py", line 215, in __set__
    raise ValueError(
ValueError: Cannot assign "'papis'": "Site.admin" must be a "User" instance.

request.user 返回用户的用户名。我想知道是什么问题。

任何帮助将不胜感激。 提前谢谢......

【问题讨论】:

  • 作为一个疯狂的猜测,您是否尝试通过 user.pk 代替?
  • 不确定这是否会帮助您解决问题,但有一种获取自定义用户模型的标准方法。 from django.contrib.auth import get_user_model 为您提供了一个返回配置的用户模型的函数。 docs.djangoproject.com/en/3.2/topics/auth/customizing/…
  • 对于外键,Django 表单需要对象的主键。尝试传递用户 ID。
  • 如果我执行 get_user_model,我会遇到循环导入问题,甚至不知道为什么让我通过 id 看看它是否会起作用。
  • 也许在 form.is_valid 下可能值得打印用户类型 print(type(form.cleaned_data["admin"]))。它可能会返回用户 ID 的 int 或用户名的字符串。

标签: python django django-models django-users


【解决方案1】:

在模型中使用这个而不是用户

from django.contrib.auth.models import User

并改变你的观点

user=request.user.id

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-17
    • 2020-04-13
    • 1970-01-01
    • 2017-12-24
    • 1970-01-01
    • 1970-01-01
    • 2015-07-28
    • 2021-02-09
    相关资源
    最近更新 更多