Python Django:使收藏夹可以从主视图访问。尝试在frontpage上按用户筛选喜欢的帖子
我知道有些问题与我的问题很接近,但我仍在努力寻找正确的方法: 在类似网格的视图中,我试图显示一个心形图标(已填充/未填充),表示登录用户是否喜欢该帖子 我的代码: views.py-问题所在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
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.