【问题标题】:I got error when I click in Like button in Django在 Django 中单击 Like 按钮时出现错误
【发布时间】:2023-03-11 03:06:01
【问题描述】:

在 Django 中单击“赞”按钮时出现错误 视频匹配查询不存在。

回溯

video_obj = Video.objects.get(id=video_id) 

我按照 youtube 上的教程进行操作,但出现错误 当我点击喜欢按钮时出现错误 我该如何解决这个问题

这是我的视频模型

class Video(models.Model):
author = models.ForeignKey(Account, on_delete=models.CASCADE)
video = models.FileField(upload_to='post-videos', validators=[validate_file_extension])
title = models.CharField(max_length=100)
description = models.TextField(null=True, blank=True)
liked = models.ManyToManyField(Account, blank=True, related_name='likes')

我的看法

def like_unlike_videos(request):
user = request.user
if request.method == 'POST':
    video_id = request.POST.get('video_id')
    video_obj = Video.objects.get(id=video_id)
    account = Account.objects.get(username=user)

    if account in video_obj.liked.all():
        video_obj.liked.remove(account)
    else:
        video_obj.liked.add(account)

    like, created = Like.objects.get_or_create(username=account, video_id=video_id)

    if not created:
        if like.value == 'Like':
            like.value = 'Unlike'
        else:
            like.value = 'Like'

    else:
        like.value = 'Like'

        video_obj.save()
        like.save()

    data = {

    }
    data = {
        'value': like.value,
        'likes': video_obj.liked.all()
    }
return render(request ,'video/the_video.html', data)

我的模板

  <form action="{% url 'video:like-video-view' %}" method="POST" class="like-form" id='{{video.id}}'>
    {% csrf_token %}
    <input type="hidden" name="post_id" value={{video.id}}>  
        <button type="submit" class="ui button like-btn{{video.id}}">
            {% if account not in video.liked.all %}
               Like
            {% else %}
               Unlike
            {% endif %}
        </button>
          <div class="ui grid">
              <div class="column">
                 <div class="like-count{{video.id}}"> {{video.num_likes}} </div>
              </div>
              <div class="column">
                 likes
            </div>
          </div>
</form>

【问题讨论】:

    标签: django django-models django-views django-forms django-templates


    【解决方案1】:

    您的参数名称是post_id,但应该是video_id

    &lt;input type="hidden" <b>name="video_id"</b> value="{{video.id}}"&gt;

    注意:通常最好使用get_object_or_404(…) [Django-doc], 然后直接使用.get(…) [Django-doc]。如果对象不存在, 例如,由于用户自己更改了 URL,get_object_or_404(…) 将导致返回 HTTP 404 Not Found 响应,而使用 .get(…) 将导致 HTTP 500 服务器错误

    【讨论】:

    • 谢谢我还有一个问题Cannot resolve keyword 'username' into field. Choices are: created, id, updated, user, user_id, value, video, video_id
    • 回溯like, created = Like.objects.get_or_create(author=account, video_id=video_id)
    • Field 'id' expected a number but got ''.
    • 模板中的{{ video.id }} 是什么?您确定这会呈现主键吗?也许video 在上下文中不是
    • 其实我不确定
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-20
    • 1970-01-01
    • 2020-01-08
    相关资源
    最近更新 更多