Python Django:使收藏夹可以从主视图访问。尝试在frontpage上按用户筛选喜欢的帖子

Python Django:使收藏夹可以从主视图访问。尝试在frontpage上按用户筛选喜欢的帖子,python,django,Python,Django,我知道有些问题与我的问题很接近,但我仍在努力寻找正确的方法: 在类似网格的视图中,我试图显示一个心形图标(已填充/未填充),表示登录用户是否喜欢该帖子 我的代码: views.py-问题所在 def home_view(request): # all posts posts = Post.objects.filter(date_posted__lte=timezone.now(), is_active=True).order_by('-date_posted') is_f

我知道有些问题与我的问题很接近,但我仍在努力寻找正确的方法:

在类似网格的视图中,我试图显示一个心形图标(已填充/未填充),表示登录用户是否喜欢该帖子

我的代码:

views.py-问题所在

def home_view(request):
    # all posts
    posts = Post.objects.filter(date_posted__lte=timezone.now(), is_active=True).order_by('-date_posted')
    is_favorite = False

    #problem starts here
    #liked_posts = Post.objects.get(id=request.user.id).liked.all()
    liked_posts = User.objects.prefetch_related('liked').get(id=request.user.id).liked.all()
    # https://stackoverflow.com/questions/63547411/django-filter-liked-posts-by-user

    if liked_posts.exists() :
        is_favorite = True
    context = {
        'posts':posts,
        ...
        'liked':liked_posts,
        'is_favorite':is_favorite,
    }
    return render(request, 'blog/home.html', context)


@login_required
def PostLikeToggle(request):
    posts = Post.objects.all()
    user = request.user
    if request.method == 'POST':
        post_id = request.POST['post_id']
        post = get_object_or_404(posts, id=post_id)
        user_liked = user in post.liked.all()
        if user_liked :
            post.liked.remove(request.user)
        else:
            post.liked.add(request.user)

    return JsonResponse({'liked':user_liked})
models.py

class Post(models.Model):
    liked = models.ManyToManyField(User, related_name='liked')
    title = models.CharField(max_length=150)
    date_posted = models.DateTimeField(null=True, blank=True, editable=True, default=timezone.now, verbose_name="Published at")

    #...

    class Meta:
        verbose_name = "Post"
        verbose_name_plural = "Posts"
        ordering = ['-created_at']

    def __str__(self):
        return self.title
url.py

urlpatterns = [
    path('', home_view, name="home"),
    #...
    path('like/', PostLikeToggle, name="like"),

]
home.html

<button data-item-id="{{ post.id }}" class="addToFavsContainer-{{ post.id }}" value="{{ post.id }}">
    <i class="thumb-{{ post.id }} fas fa-thumbs-up"></i>
</button>
          <script>
            $(".addToFavsContainer-{{ post.id }}").click(function () {
              var item_id = $(this).data('item-id');
              $.ajax({
                type: "POST",
                url: {% url 'like' %},
                data: {
                  post_id: item_id,
                  csrfmiddlewaretoken: $(
                    "input[name=csrfmiddlewaretoken]"
                  ).val(),
                },
                dataType: "json",
                success: LikePost,
              });

              function LikePost(data, jqXHR) {
                if (data["liked"]) {
                  $(".thumb-{{ post.id }}")
                    .removeClass("fas fa-thumbs-up")
                    .addClass("far fa-thumbs-up");
                } else {
                  $(".thumb-{{ post.id }}")
                    .removeClass("far fa-thumbs-up")
                    .addClass("fas fa-thumbs-up");
                }
              }
            });
          </script>

<!--somewhere later in the same file -->

        {% if is_favorite %}
        <!-- link to remove fav, visually save the state the user has chosen -->
        {% else %}
        <!-- link to add fav, visually save the state the user has chosen -->
        {% endif %}
更长:

Internal Server Error: /
Traceback (most recent call last):
  File "/projectfolder/env/lib/python3.8/site-packages/django/core/handlers/exception.py", line 47, in inner
    response = get_response(request)
  File "//projectfolder/env/lib/python3.8/site-packages/django/core/handlers/base.py", line 181, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/projectfolder/blog/views.py", line 24, in home_view
    liked_posts = User.objects.prefetch_related('liked').get(id=request.user.id).liked.all()
  File "/projectfolder/env/lib/python3.8/site-packages/django/db/models/query.py", line 435, in get
    raise self.model.DoesNotExist(
django.contrib.auth.models.User.DoesNotExist: User matching query does not exist.

问题出在视图文件中。我只是没有得到所有用户喜欢的项目。代码的其余部分工作正常。

有错误吗?@Sumithran是的,有错误。我已经添加了这些。很抱歉问题出在视图内部。我只是不知道如何得到所有喜欢的帖子。非常感谢。
Internal Server Error: /
Traceback (most recent call last):
  File "/projectfolder/env/lib/python3.8/site-packages/django/core/handlers/exception.py", line 47, in inner
    response = get_response(request)
  File "//projectfolder/env/lib/python3.8/site-packages/django/core/handlers/base.py", line 181, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/projectfolder/blog/views.py", line 24, in home_view
    liked_posts = User.objects.prefetch_related('liked').get(id=request.user.id).liked.all()
  File "/projectfolder/env/lib/python3.8/site-packages/django/db/models/query.py", line 435, in get
    raise self.model.DoesNotExist(
django.contrib.auth.models.User.DoesNotExist: User matching query does not exist.