Django Query Error: How do i properly query my total likes to show in the Home Screen?

Django Query Error: How do i properly query my total likes to show in the Home Screen?

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

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

谢谢!

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

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/', LikeView, name='like_post'),
]

异常:Page not found (404) No BlogPost matches the given query.get_object_or_404 提出,因为它确实如其名。如果数据库中不存在任何视图中提供的 slugBlogPost,Django 将在您看到时引发 Http404 异常。

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

编辑

我没看过BlogPost模型,不好意思,不过资料还是相关的,这样的slug的BlogPost是不存在的。因此,请进行手动检查,查看 slug 以什么形式到达视图,然后在数据库或您的 shell.

中手动检查