如何获取当前登录用户?Django 模型

马纳斯·S·罗伊

我想让当前登录的用户访问这个 CreateForm 表单。下面我给出了我当前的代码,这里 request.user 没有给我错误

/create-post/ 处的 ValueError 无法分配“<SimpleLazyObject: <User: testuser>>”:“Post.author”必须是“Author”实例。

模型.py

class Author(models.Model):
   user = models.OneToOneField(User, on_delete=models.CASCADE)
   rate = models.IntegerField(default=0)
 
class Post(models.Model):
    title = models.CharField(max_length= 50)
    overview = models.TextField()
    body_text = RichTextUploadingField(null = True)
    time_upload = models.DateTimeField(auto_now_add=True)
    author = models.ForeignKey(Author, related_name='author', on_delete=models.CASCADE)
    thumbnail = models.ImageField(upload_to = 'thumbnails')
    publish = models.BooleanField()
    categories = models.ManyToManyField(Categories)
    read = models.IntegerField(default=0)
    slug = models.SlugField(null= True, blank= True)

表格.py

class CreateForm(ModelForm):
class Meta:
    model = Post
    fields = [
        'title',
        'overview',
        'body_text',
        'thumbnail',
        'categories',
        'publish',
    ]

视图.py

def create_post(request):
if request.method == 'POST':
    form = CreateForm(request.POST, request.FILES)
    if form.is_valid:
        post = form.save(commit=False)
        post.author= request.user
        post.save()
        return render(request, 'index.html')
else:
    form = CreateForm()
return render(request, 'create_post.html', {'form': form})
威廉·范昂森

正如错误所说,post.author需要一个Author对象,而不是用户。因此,您可以通过以下方式检索它:

from django.contrib.auth.decorators import login_required

@login_required
def create_post(request):
    if request.method == 'POST':
        form = CreateForm(request.POST, request.FILES)
        if form.is_valid():
            form.instance.author= request.user.author
            form.save()
            return render(request, 'index.html')
    else:
        form = CreateForm()
    return render(request, 'create_post.html', {'form': form})

您还应该调用is_valid()方法 [Django-doc]所以.form.is_valid()


注意:您可以使用@login_required装饰器 [Django-doc]将视图限制为经过身份验证的用户的视图


注意:通常使用[Django-doc]引用用户模型比直接使用模型 [Django-doc]更好。有关更多信息,您可以查看文档的引用模型部分settings.AUTH_USER_MODEL UserUser

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

获取与给定模型实例的当前登录用户关系

获取登录用户,同时在 Django 中使用 UpdateView 更新模型用户

Django获取登录用户的用户名并将其传递给模型

如何从与当前登录用户关联的模型中导入和编辑变量

如何在Django的模型字段中添加已登录用户的用户名

如何从不同的模型中获取登录用户详细信息作为参数

使用外键进行Django模型查询并登录用户

Django:在模型保存中获取当前用户

修改admin.py,使其仅提供模型的当前登录用户。

如何获取当前登录用户

如何将当前登录的用户保存到 Django 中的模型

如何将模型字段的值设置为当前登录的用户?Django的

将登录用户附加到 Django REST 框架 POST 模型更新

如何使用自定义抽象用户在 django 中获取当前登录用户

如何在Django中获取当前登录用户的用户ID?

如何检索已提交表单的已登录用户的最新模型对象?

如何获取当前Windows登录用户的用户名?

如何获取当前登录用户正在关注的用户帖子

如何获取当前登录用户authservice的用户名

Django-如何获取当前登录用户以在django admin中进行填充?

显示模型中已登录用户的数据

如何使用 django-microsoft-auth 获取当前登录用户进行 Microsoft 身份验证?

Django 模型所有者字段将登录用户读取为 None 而不是用户名

Django-将登录用户的用户名作为其他模型的默认值

如何在 Django 的基于类的视图中将模型表单字段分配给当前登录的用户

如何获取用户的 ID 到视图模型?[登录表格]

如何获取当前Windows登录用户的全名而不是域名

如何获取服务中的当前登录用户

XMPPFramework-如何获取当前登录用户的显示名称