Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从基于django类的视图(DetailView)中的POST方法反转_Django_Redirect - Fatal编程技术网

从基于django类的视图(DetailView)中的POST方法反转

从基于django类的视图(DetailView)中的POST方法反转,django,redirect,Django,Redirect,我可能有一个很小的问题,但我是Django的新手,我不知道当我想重定向到这里时为什么会出错。我得到正确的url,但我得到错误'str'对象没有属性'get'。我错了什么?表单是正确的,对象是在db中创建的。这只是关于错误的重定向。谢谢你的帮助 My URL.py: models.py 返回一个字符串,其中包含重定向到的路径。但是视图需要返回一个HttpResponse,例如 您可以使用来组合计算反转,并将结果包装为HttpResponse。因此,您可以将代码修改为: from django.sh

我可能有一个很小的问题,但我是Django的新手,我不知道当我想重定向到这里时为什么会出错。我得到正确的url,但我得到错误'str'对象没有属性'get'。我错了什么?表单是正确的,对象是在db中创建的。这只是关于错误的重定向。谢谢你的帮助

My URL.py:

models.py

返回一个字符串,其中包含重定向到的路径。但是视图需要返回一个
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'))