首页 > 解决方案 > 类型对象“帖子”没有属性“过滤器”

问题描述

每次我尝试对帖子发表评论时,都会在帖子编号处收到 AttirbuteError。例如-'AttributeError at /post/54/',在它下面说'type object'Post'没有属性'filter''。然后它将我引导到我的 views.py 第 58 行,内容如下:post = self.get_object(Post). 它是我的 PostDetailClass 的一部分:

class PostDetailView(DetailView):
    model = Post
    
    form = CommentForm
    
    def post(self, request, *args, **kwargs):
        form = CommentForm(request.POST)
        if form.is_valid():
            post = self.get_object(Post)
            form.instance. user = request.user
            form.instance.post = post
            reply_id = request.POST.get('comment_id')
            comment_qs = None
            if reply_id:
                comment_qs = Comment.objects.get(id=reply_id)
            reply = comment_qs, reply=None
            form.save()
            form.save_m2m()

            return redirect(reverse("post", kwargs={
                'content': Post.content
            }))


网址.py

    from django.urls import path
    from django.conf import settings
    from django.conf.urls.static import static
    from django.urls.conf import re_path
    from django.views.generic.base import RedirectView
    from .views import ( 
        PostListView, 
        PostDetailView, 
        PostCreateView,
        PostDeleteView,
        UserPostListView,
        TagIndexView,
        about,
    )
    from . import views

    urlpatterns = [
        path('', PostListView.as_view(), name='blog-home'),
        path('post/<int:pk>/', PostDetailView.as_view(), name='post- 
   detail'),
        path('user/<str:username>', UserPostListView.as_view(), 
    name='user-posts'),
        path('post/new', PostCreateView.as_view(), name='post-create'),
        path('about/', views.about, name='blog-about'),
        path('map/', views.map, name='blog-map'),
        path('post/<int:pk>/delete/', PostDeleteView.as_view(), 
    name='post-delete'),
        path('latest-posts/', views.latest_posts, name='latest-posts'),
        path('focused/', views.focused, name='focused'),
        path('snakegame/',views.snake_game, name='snake-game'),
        re_path(r'^tag/(?P<slug>[-\w]*)/$',TagIndexView.as_view(), 
    name='tagged')

    ]+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

谁能指出我的代码有什么问题?谢谢你。

标签: pythonhtmldjango

解决方案


问题来自传递Postself.get_object(). get_object接受一个查询集作为它的参数。一个查询集对象应该有.filter()但没有Post

在这种情况下,您实际上不需要将任何内容传递给self.get_object. 当您不向其传递任何内容时,查询集默认为self.get_queryset().

简而言之,将该行更改为:

post = self.get_object()

推荐阅读