在基于Django类的视图(DetailView)中与POST方法相反

托马斯

我可能有一个琐碎的问题,但是我是Django的新手,我不知道为什么要重定向到这里时出现错误。我得到正确的url,但得到错误“ str”对象没有属性“ get”我怎么了 格式正确,并且在db中创建了对象。这只是关于错误的重定向。感谢帮助。

我的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})

错误检视

威廉·范昂塞姆

reverse(..)函数[Django的DOC]返回一个字符串,其中包含到您重定向路径。但是视图需要返回HttpResponse,例如HttpResponseRedirect[Django-doc]

您可以使用redirect(..)[Django-doc]函数来组合计算反向,并将结果包装在中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'))

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用基于类的视图DetailView将图像库放入Django中的product.html

来自分类Dev

在Django中,是否应该对基于类的视图使用GET / POST或特定方法?

来自分类Dev

Django 中基于类的视图

来自分类Dev

基于Django类的视图:了解视图类中的参数

来自分类Dev

了解 Django 基于类(DetailView 和 View)

来自分类Dev

在Django中基于类的视图中使用post保存表单时如何保存用户

来自分类Dev

在模板中将抽象类用于Django中基于通用类的DetailView

来自分类Dev

django分页与基于类的视图

来自分类Dev

Django:具有Mixins和Dispatch方法的基于类的视图

来自分类Dev

Django DetailView中的增量视图计数

来自分类Dev

在Django的detailview中获取方法

来自分类Dev

在Django 1.8中创建基于登录和注销类的视图

来自分类Dev

Django:在基于类的通用视图ListView中访问HttpRequest

来自分类Dev

Django基于类的视图未在模板中呈现变量

来自分类Dev

django从基于类的视图中的模板中打印变量

来自分类Dev

在Django 1.8中创建基于登录和注销类的视图

来自分类Dev

从 Django 中基于类的视图返回上下文

来自分类Dev

如何将权限类应用于Django-Rest Framework中基于类的视图中的特定方法?

来自分类Dev

基于权限的基于类的视图Django

来自分类Dev

Django 视图函数中的 POST 与 GET 方法

来自分类Dev

如何从Django中另一个基于类的视图中返回基于类的视图的结果?

来自分类Dev

基于Django函数的视图到基于类的视图

来自分类Dev

基于分页类的视图Django 1.5

来自分类Dev

基于Django类的视图-线程安全

来自分类Dev

基于Django类的通用视图重定向

来自分类Dev

基于Django类的仅发布视图

来自分类Dev

基于Django类的视图示例

来自分类Dev

基于类的视图上的Django表单验证

来自分类Dev

基于Django类的视图移动模板

Related 相关文章

  1. 1

    如何使用基于类的视图DetailView将图像库放入Django中的product.html

  2. 2

    在Django中,是否应该对基于类的视图使用GET / POST或特定方法?

  3. 3

    Django 中基于类的视图

  4. 4

    基于Django类的视图:了解视图类中的参数

  5. 5

    了解 Django 基于类(DetailView 和 View)

  6. 6

    在Django中基于类的视图中使用post保存表单时如何保存用户

  7. 7

    在模板中将抽象类用于Django中基于通用类的DetailView

  8. 8

    django分页与基于类的视图

  9. 9

    Django:具有Mixins和Dispatch方法的基于类的视图

  10. 10

    Django DetailView中的增量视图计数

  11. 11

    在Django的detailview中获取方法

  12. 12

    在Django 1.8中创建基于登录和注销类的视图

  13. 13

    Django:在基于类的通用视图ListView中访问HttpRequest

  14. 14

    Django基于类的视图未在模板中呈现变量

  15. 15

    django从基于类的视图中的模板中打印变量

  16. 16

    在Django 1.8中创建基于登录和注销类的视图

  17. 17

    从 Django 中基于类的视图返回上下文

  18. 18

    如何将权限类应用于Django-Rest Framework中基于类的视图中的特定方法?

  19. 19

    基于权限的基于类的视图Django

  20. 20

    Django 视图函数中的 POST 与 GET 方法

  21. 21

    如何从Django中另一个基于类的视图中返回基于类的视图的结果?

  22. 22

    基于Django函数的视图到基于类的视图

  23. 23

    基于分页类的视图Django 1.5

  24. 24

    基于Django类的视图-线程安全

  25. 25

    基于Django类的通用视图重定向

  26. 26

    基于Django类的仅发布视图

  27. 27

    基于Django类的视图示例

  28. 28

    基于类的视图上的Django表单验证

  29. 29

    基于Django类的视图移动模板

热门标签

归档