【发布时间】:2019-12-28 12:47:06
【问题描述】:
我可能有一些微不足道的问题,但我是 Django 的新手,我不知道为什么我想在这里重定向时出错。我得到正确的 url 但我得到错误 'str' object has no attribute 'get'。我错了什么?表格是正确的,对象是在数据库中创建的。这只是关于错误的重定向。感谢您的帮助。
我的 urls.py:
urlpatterns = [
path('', PostListView.as_view(), name='blog-home'),
path('user/<str:username>/', UserPostListView.as_view(), name='user-posts'),
path('post/<int:pk>/', PostDetailView.as_view(), name='post-detail'),
path('post/new/', PostCreateView.as_view(), name='post-create'),
path('post/<int:pk>/update/', PostUpdateView.as_view(), name='post-update'),
path('post/<int:pk>/delete/', PostDeleteView.as_view(), name='post-delete'),
path('comments/delete/<int:pk>/', views.CommentDeleteView.as_view(), name='delete-comment'),
path('about/', views.about, name='blog-about'),
]
views.py
class PostDetailView(DetailView):
model = Post
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['comments'] = Comment.objects.all()[::-1]
context['comm_form'] = CommentCreateForm()
return context
def post(self, request, *args, **kwargs):
if request.method == 'POST':
comm_form = CommentCreateForm(request.POST)
comm_form.instance.post = Post.objects.get(id=self.kwargs.get('pk'))
comm_form.instance.author = self.request.user
comm_form.save()
return reverse('post-detail', kwargs={'pk': self.kwargs.get('pk')})
else:
comm_form = CommentCreateForm()
return reverse('post-detail', kwargs={'pk': self.kwargs.get('pk')})
models.py
class Post(models.Model):
title = models.CharField(max_length=100)
content = models.TextField()
date_posted = models.DateTimeField(default=timezone.now)
author = models.ForeignKey(User, on_delete=models.CASCADE)
def __str__(self):
return self.title
def get_absolute_url(self):
return reverse('post-detail', kwargs={'pk': self.pk})
class Comment(models.Model):
comm_content = models.TextField(max_length=200)
add_date = models.DateTimeField(default=timezone.now)
author = models.ForeignKey(User, on_delete=models.CASCADE)
post = models.ForeignKey(Post, on_delete=models.CASCADE)
def __str__(self):
return f"Comment of post {self.post} posted at {self.add_date}."
def get_absolute_url(self):
return reverse('post-detail', kwargs={'pk': self.post.pk})
【问题讨论】:
-
您的视图返回一个字符串,而不是
HttpResponse。但您需要显示您的PostDetailView的详细信息,以便我们为您提供帮助。 -
当然,对不起,我忘了添加最重要的:)已经编辑了。