【问题标题】:how to add likes of an object for the given user如何为给定用户添加喜欢的对象
【发布时间】:2013-08-17 18:12:45
【问题描述】:

我有一个论坛模型。我有一个问题、正文、pub_date、图像、创建者、喜欢的字段。从管理员,我可以为特定论坛的给定用户添加喜欢。但是我现在很困惑,如何在视图中为 request.user 添加喜欢?

models.py:

class Forum(models.Model):
    question = models.CharField(max_length=150)
    body = models.TextField()
    pub_date = models.DateTimeField(default=datetime.now)
    image = models.ImageField(upload_to=get_upload_file_name)
    creator = models.ForeignKey(User, related_name="creator_set")
    likes = models.ManyToManyField(User, through="Like")

    def __unicode__(self):
        return self.question

class Like(models.Model):
    forum = models.ForeignKey(Forum)
    liked = models.ForeignKey(User)
    liked_date = models.DateTimeField(default=datetime.now)

    def __unicode__(self):
        return "%s likes %s" % (self.liked, self.forum)

我想过这样做:

>>>forum = Forum.objects.get(id=1)
>>>user = request.user
>>>user.like_set.add(forum)

但是,它没有帮助。请,任何帮助将不胜感激。谢谢。

【问题讨论】:

    标签: django django-views django-orm


    【解决方案1】:

    首先,您需要以视图为目标的create a URL。该 URL 将传递 forum_id 作为 URL 参数。

    from datetime import datetime
    from django.shortcuts import get_object_or_404
    
    @login_required
    def update_likes(request, forum_id):
        forum = get_object_or_404(Forum, id=forum_id)
        like, _ = Like.objects.get_or_create(user=request.user, forum=forum, 
                       defaults={'liked_date': datetime.now()})
        #rest of the code here. 
    

    这是一种方式。您也可以按照您的想法进行操作,但您必须手动控制可能生成的重复项。 (您可以在 ('forum', 'liked') 上指定 unique_together

    删除

    @login_required
    def delete_likes(request, forum_id):
        forum = get_object_or_404(Forum, id=forum_id)
        like = get_object_or_404(Like, user=request.user, forum=forum)
        like.delete()
        #rest of the code here. 
    

    【讨论】:

    • 谢谢,我会试试这个,如果request.user已经在forum.like_set.all()中,如何删除点赞。请在这里指导我。
    • 你能告诉我在模板中做什么。我尝试了 request.user,但即使我已登录,它也会告诉我匿名。
    • 只需添加装饰器login_required 。它应该可以正常工作
    • 它是 get_or_create 而不是 get_object_or_create - 我认为你在这和 get_object_or_404 之间感到困惑
    猜你喜欢
    • 1970-01-01
    • 2021-11-06
    • 2021-05-29
    • 2023-03-25
    • 2016-11-09
    • 1970-01-01
    • 2018-04-03
    • 1970-01-01
    • 2020-09-11
    相关资源
    最近更新 更多