【问题标题】:Show users that liked a post on django显示喜欢 django 帖子的用户
【发布时间】:2020-09-03 18:05:44
【问题描述】:

嗯,我的项目的功能之一是给帖子点赞,完成后,喜欢帖子的用户应该出现在点赞数旁边,问题是用户不会出现某些原因。我认为模型中存在错误,我认为它应该有一个定义来向用户展示或类似的东西。

views.py

    def like_post(request):
        user = request.user
        if request.method == 'POST':
          post_id = request.POST.get('post_id')
          post_obj = Post.objects.get(id=post_id)
          if user in post_obj.liked.all():
            post_obj.liked.remove(user)
          else:
            post_obj.liked.add(user)
          like, created = Like.objects.get_or_create(author=user, post_id=post_id)
          if not created:
            if like.value == 'Like':
              like.value == 'Unlike'
            else:
              like.value = 'Like'

          like.save()
        return redirect('imagelist')

    def imagelist(request):
        images = Post.objects.all()
        context2 = {
            "images": images,
        }
        return render(request, 'imagelist.html', context2)

模型.py

    class Like(models.Model):
        author = models.ForeignKey(User, on_delete=models.CASCADE)
        post = models.ForeignKey(Post, on_delete=models.CASCADE)
        value = models.CharField(choices=LIKE_CHOICES, default='Like', max_length=10)

        def __str__(self):
            return str(self.post)

    class Post(models.Model):
        text = models.CharField(max_length=200)
        posti = models.ImageField(upload_to='media/images', null=True, blank="True")
        video = models.FileField(upload_to='media/images', null=True, blank="True")
        user = models.ForeignKey(User, related_name='imageuser', on_delete=models.CASCADE, default='username')
        liked = models.ManyToManyField(User, default=None, blank=True, related_name='liked')
        updated = models.DateTimeField(auto_now=True)
        created =models.DateTimeField(auto_now_add=True)

        def __str__(self):
            return str(self.tittle)

        @property
        def num_likes(self):
            return self.liked.all().count()

imagelist.html

    <strong>{{ image.liked.user }}</strong>

【问题讨论】:

    标签: python html django django-models django-views


    【解决方案1】:

    你必须像这样使用循环:

    {% for user in image.liked.all %}
     {{ user.username }}
    {% endfor %}
    

    【讨论】:

    • 谢谢!您的代码有效,您能向我解释一下为什么有效吗?
    • 当然,当你直接使用image.liked.user时,它返回None,不显示任何数据。因为,您的 liked 字段返回了一个查询集。此查询集由用户对象组成。所以没有user 字段。您必须使用循环访问对象,然后才能访问用户的字段。
    猜你喜欢
    • 2020-11-04
    • 1970-01-01
    • 2020-12-12
    • 2019-06-02
    • 1970-01-01
    • 1970-01-01
    • 2017-05-08
    • 2019-08-13
    • 2019-10-06
    相关资源
    最近更新 更多