社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Django

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

Manas S. Roy • 4 年前 • 2096 次点击  

我想让当前登录的用户访问这个CreateForm表单。下面是我的当前代码,这里是我的请求。用户没有给我错误

ValueError位于/创建帖子/ 无法分配“<SimpleLazyObject:<用户: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})
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/131096
文章 [ 2 ]  |  最新文章 4 年前
Kauê Oliveira
Reply   •   1 楼
Kauê Oliveira    4 年前

这个 author 你的场地 Post 模型是 Author 模型,而不是用户。你可以替换 post.author = request.user 与:

if request.user.author:
    post.author = request.user.author
else:
    post.author = Author.objects.create(user=request.user)

如果已经为用户创建了Author实例,Willem给出的答案是有效的,但如果没有与该用户关联的Author对象,则会抛出异常。

Willem Van Onsem
Reply   •   2 楼
Willem Van Onsem    4 年前

正如错误所说, 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() method [Django-doc] 所以 form.is_valid () .


笔记 :您可以将视图限制为具有 @login_required decorator [Django-doc] .


笔记 :通常最好利用 settings.AUTH_USER_MODEL  [Django-doc] 参考用户模型,而不是使用 User model [Django-doc] 直接地有关更多信息,请参见 referencing the User model section of the documentation .