微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Django 查询错误:我如何正确查询我在主屏幕中显示的总喜欢?

如何解决Django 查询错误:我如何正确查询我在主屏幕中显示的总喜欢?

任何人都可以就如何查询要在我的 HTML 中显示的帖子的 `total_likes 提供建议,我试过了,但出现了这个错误

Page not found (404)
No BlogPost matches the given query.

谢谢!

我认为这可能是我查询链接博客文章的方式,但我不确定为什么我错了,尽管尝试了几个小时,但我不知道如何修改它。

views.py

def home_Feed_view(request,**kwargs):
    
    context = {}

    blog_posts = sorted(BlogPost.objects.all(),key= attrgetter('date_updated'),reverse = True)
    blog_post = get_object_or_404(BlogPost,slug=request.POST.get('blog_post_slug'))
    total_likes = blog_post.total_likes()
    liked = False
    if blog_post.likes.filter(id=request.user.id).exists():
        liked = True
    context['blog_posts'] = blog_posts 
    context['blog_post'] = blog_post
    context['total_likes'] = total_likes
    return render(request,"HomeFeed/snippets/home.html",context)


def LikeView(request,slug):
    context = {}

    post = get_object_or_404(BlogPost,slug=slug)
    liked = False
    if post.likes.filter(id=request.user.id).exists():
        post.likes.remove(request.user)
        liked = False
    else:
        post.likes.add(request.user)
        liked = True 
    return redirect('HomeFeed:detail',slug=slug)

.html

{% for post in blog_posts %} 

<td class="table-primary">

  <form action="{% url 'HomeFeed:like_post' post.slug %}" method="POST">
    {% csrf_token %} 

    <button type="submit" name="blog_post_slug"  value="{{post.slug}}" class='btn btn-primary btn-sm'>
      Like
    </button> 

    {{ total_likes }} Likes

  </form>

</td>   

{% endfor %}

models.py

class BlogPost(models.Model):
    body = models.TextField(max_length=5000,null=False,blank=False)
    likes = models.ManyToManyField(settings.AUTH_USER_MODEL,related_name='blog_posts',blank=True)
    slug = models.SlugField(blank=True,unique=True)
 

    def total_likes(self):
        return self.likes.count()
  

urls.py

from django.urls import path
from HomeFeed.views import(
    home_Feed_view,LikeView,)

urlpatterns = [
    path('',home_Feed_view,name= "main"),path('<slug>/like/',name='like_post'),]

解决方法

异常:Page not found (404) No BlogPost matches the given query.get_object_or_404 引发,因为它完全符合名称所说的那样。如果数据库中不存在任何视图中提供的 BlogPostslug,Django 将在您目睹的过程中引发 Http404 异常。

现在,由于我们不知道您的 BlogPost 模型的结构,我无法真正告诉您在哪里更改,我只能告诉您您需要确保 {{1} } 是每个 slug 实例上的唯一字段,否则您的代码会按预期工作。

编辑

我还没有看到 BlogPost 模型,我的错,但是信息仍然与具有这样 BlogPost 的 BlogPost 不存在相关。因此,请进行手动检查,查看 slug 到达视图中的内容,然后在 DB 或您的 shell 中手动检查。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。