【发布时间】: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