首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >类型对象“Post”没有属性“filter”

类型对象“Post”没有属性“filter”
EN

Stack Overflow用户
提问于 2021-11-11 23:58:23
回答 2查看 82关注 0票数 0

每次我试图在帖子上发表评论时,我都会在帖子编号处得到一个AttirbuteError。例如- 'AttributeError at /post/54/',下面写着'type object 'Post‘没有’filter‘属性。然后,它将我转到我的views.py第58行,其内容为:post = self.get_object(Post)。它是我的PostDetailClass的一部分:

代码语言:javascript
复制
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
            }))

urls.py

代码语言:javascript
复制
    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)

有人能指出我的代码出了什么问题吗?谢谢。

EN

回答 2

Stack Overflow用户

发布于 2021-11-12 00:20:00

该问题源于将Post传递给self.get_object()get_object接受查询集作为其参数。queryset对象应该有.filter(),但没有Post

在这种情况下,您实际上不需要向self.get_object传递任何内容。当您没有向它传递任何东西时,查询集默认为self.get_queryset()

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

代码语言:javascript
复制
post = self.get_object()
票数 2
EN

Stack Overflow用户

发布于 2021-11-12 02:39:35

你应该先尝试获取post对象,如下所示:

代码语言:javascript
复制
object_id = self.kwargs[self.pk_url_kwarg]
post = self.model.objects.get(id=object_id)

在你的post方法中:

代码语言:javascript
复制
def post(self, request, *args, **kwargs):
    form = CommentForm(request.POST)
    if form.is_valid():
        object_id = self.kwargs[self.pk_url_kwarg]
        post = self.model.objects.get(id=object_id)
        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
        }))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69936386

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档