Django Like Syste --> RedirectView 不重定向到 post
Django Like Syste --> RedirectView not redirecting to post
我 运行 在尝试弄清楚如何为我的 Django 博客实现点赞系统时遇到了问题。我有一个 post 详细视图和一个 PostRedirectView。我希望重定向视图获得 Post 的绝对 URL 我查看并切换 like/unlike 因为我喜欢的系统是在我的 models.py 中链接的 ManyToManyField post。相关代码如下:
views.py
class PostDetailView(DetailView):
model = Post
template_name = 'blog/post_detail.html'
context_object_name = 'post'
def get_context_data(self, **kwargs):
data = super().get_context_data(**kwargs)
comments_connected = Comment.objects.filter(post_connected=self.get_object()).order_by('-date_posted')
data['comments'] = comments_connected
data['form'] = NewCommentForm(instance=self.request.user)
return data
def post(self, request, *args, **kwargs):
new_comment = Comment(content=request.POST.get('content'),
author=self.request.user,
post_connected=self.get_object())
new_comment.save()
return self.get(self, request, *args, **kwargs)
class PostLikeRedirect(RedirectView):
def get_redirect_url(self, *args, **kwargs):
obj = get_object_or_404(Post, pk=self.kwargs.get('id'))
return obj.get_absolute_url()
urls.py
path('post/<int:pk>/', PostDetailView.as_view(), name='post-detail'),
path('post/<int:pk>/like', PostLikeRedirect.as_view(), name='post-like'),
models.py
class Post(models.Model):
content = models.TextField(max_length=1000)
date_posted = models.DateTimeField(default=timezone.now)
author = models.ForeignKey(User, on_delete=models.CASCADE, related_name="users_who_authored")
like = models.ManyToManyField(settings.AUTH_USER_MODEL, blank=True, related_name="users_who_liked")
def __str__(self):
return f'{self.author} posts: {self.content[:8]}'
@property
def number_of_comments(self):
return Comment.objects.filter(post_connected=self).count()
def __str__(self):
return f'{self.author} posted'
我得到的错误是当我去 post/id(e.g. 2)/like 时找不到 404 页面和错误信息
No Post matches the given query.
我知道这个错误是什么意思我只是无法确定确切的时间和我没有正确传递查询的地方
您正在尝试从 URL 获取 id
,但它被定义为 pk
。所以,将您的观点更改为
class PostLikeRedirect(RedirectView):
def get_redirect_url(self, *args, **kwargs):
<b>obj = get_object_or_404(Post, pk=self.kwargs["pk"])
^^^^^^^^^^^^^^^^^^^^^</b>
return obj.get_absolute_url()
我 运行 在尝试弄清楚如何为我的 Django 博客实现点赞系统时遇到了问题。我有一个 post 详细视图和一个 PostRedirectView。我希望重定向视图获得 Post 的绝对 URL 我查看并切换 like/unlike 因为我喜欢的系统是在我的 models.py 中链接的 ManyToManyField post。相关代码如下:
views.py
class PostDetailView(DetailView):
model = Post
template_name = 'blog/post_detail.html'
context_object_name = 'post'
def get_context_data(self, **kwargs):
data = super().get_context_data(**kwargs)
comments_connected = Comment.objects.filter(post_connected=self.get_object()).order_by('-date_posted')
data['comments'] = comments_connected
data['form'] = NewCommentForm(instance=self.request.user)
return data
def post(self, request, *args, **kwargs):
new_comment = Comment(content=request.POST.get('content'),
author=self.request.user,
post_connected=self.get_object())
new_comment.save()
return self.get(self, request, *args, **kwargs)
class PostLikeRedirect(RedirectView):
def get_redirect_url(self, *args, **kwargs):
obj = get_object_or_404(Post, pk=self.kwargs.get('id'))
return obj.get_absolute_url()
urls.py
path('post/<int:pk>/', PostDetailView.as_view(), name='post-detail'),
path('post/<int:pk>/like', PostLikeRedirect.as_view(), name='post-like'),
models.py
class Post(models.Model):
content = models.TextField(max_length=1000)
date_posted = models.DateTimeField(default=timezone.now)
author = models.ForeignKey(User, on_delete=models.CASCADE, related_name="users_who_authored")
like = models.ManyToManyField(settings.AUTH_USER_MODEL, blank=True, related_name="users_who_liked")
def __str__(self):
return f'{self.author} posts: {self.content[:8]}'
@property
def number_of_comments(self):
return Comment.objects.filter(post_connected=self).count()
def __str__(self):
return f'{self.author} posted'
我得到的错误是当我去 post/id(e.g. 2)/like 时找不到 404 页面和错误信息
No Post matches the given query.
我知道这个错误是什么意思我只是无法确定确切的时间和我没有正确传递查询的地方
您正在尝试从 URL 获取 id
,但它被定义为 pk
。所以,将您的观点更改为
class PostLikeRedirect(RedirectView):
def get_redirect_url(self, *args, **kwargs):
<b>obj = get_object_or_404(Post, pk=self.kwargs["pk"])
^^^^^^^^^^^^^^^^^^^^^</b>
return obj.get_absolute_url()