从基于django类的视图(DetailView)中的POST方法反转
我可能有一个很小的问题,但我是Django的新手,我不知道当我想重定向到这里时为什么会出错。我得到正确的url,但我得到错误'str'对象没有属性'get'。我错了什么?表单是正确的,对象是在db中创建的。这只是关于错误的重定向。谢谢你的帮助 My URL.py: models.py 返回一个字符串,其中包含重定向到的路径。但是视图需要返回一个从基于django类的视图(DetailView)中的POST方法反转,django,redirect,Django,Redirect,我可能有一个很小的问题,但我是Django的新手,我不知道当我想重定向到这里时为什么会出错。我得到正确的url,但我得到错误'str'对象没有属性'get'。我错了什么?表单是正确的,对象是在db中创建的。这只是关于错误的重定向。谢谢你的帮助 My URL.py: models.py 返回一个字符串,其中包含重定向到的路径。但是视图需要返回一个HttpResponse,例如 您可以使用来组合计算反转,并将结果包装为HttpResponse。因此,您可以将代码修改为: from django.sh
HttpResponse
,例如
您可以使用来组合计算反转,并将结果包装为HttpResponse
。因此,您可以将代码修改为:
from django.shortcuts import redirect
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 redirect('post-detail', pk=self.kwargs.get('pk'))
else:
return redirect('post-detail', pk=self.kwargs.get('pk'))
从django.shortcuts导入重定向
类PostDetailView(DetailView):
型号=员额
def获取上下文数据(自身,**kwargs):
context=super()。获取上下文数据(**kwargs)
context['comments']=Comment.objects.all()[::-1]
上下文['comm_form']=CommentCreateForm()
返回上下文
def post(自我、请求、*args、**kwargs):
如果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()
返回重定向('post-detail',pk=self.kwargs.get('pk'))
其他:
return redirect('post-detail',pk=self.kwargs.get('pk'))
您的视图返回一个字符串,而不是一个HttpResponse
。但是您需要显示您的PostDetailView
的详细信息,以便我们可以帮助您。当然,很抱歉,我忘记添加已编辑的最重要的:)。
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')})
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})
from django.shortcuts import redirect
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 redirect('post-detail', pk=self.kwargs.get('pk'))
else:
return redirect('post-detail', pk=self.kwargs.get('pk'))