每次我试图在帖子上发表评论时,我都会在帖子编号处得到一个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
}))urls.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)有人能指出我的代码出了什么问题吗?谢谢。
发布于 2021-11-12 00:20:00
该问题源于将Post传递给self.get_object()。get_object接受查询集作为其参数。queryset对象应该有.filter(),但没有Post。
在这种情况下,您实际上不需要向self.get_object传递任何内容。当您没有向它传递任何东西时,查询集默认为self.get_queryset()。
简而言之,将该行更改为:
post = self.get_object()发布于 2021-11-12 02:39:35
你应该先尝试获取post对象,如下所示:
object_id = self.kwargs[self.pk_url_kwarg]
post = self.model.objects.get(id=object_id)在你的post方法中:
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
}))https://stackoverflow.com/questions/69936386
复制相似问题