Я столкнулся с этой ошибкой при попытке отправить комментарий в форме, которую я создал.unbound method comment() должен быть вызван с экземпляром GetPostView в качестве первого аргумента (вместо этого был получен экземпляр WSGIRequest)
Это вид класса с CommentForm
и метод возвращающей HttpResponseRedirect
только в целях тестирования:
class GetPostView(TemplateView):
template_name = 'blog/post.html'
def get(self, request, id):
return render(request, self.template_name, {
'post': Post.objects.get(pk = id),
'comments': Comment.objects.filter(post = id),
'form': CommentForm()
})
def comment(self, request):
return HttpResponseRedirect(request.path)
здесь, в urls.py
:
app_name = 'blog'
urlpatterns = [
url(r'^$', views.IndexView.as_view(), name = 'index'),
url(r'^categories/$', views.CategoriesView.as_view(), name = 'categories'),
url(r'^post/(?P<id>[0-9]+)/$', views.GetPostView.as_view(), name = 'post'),
url(r'^post/(?P<id>[0-9]+)/comment$', views.GetPostView.comment)
]
И, как в названии, при отправке формы появляется ошибка:
unbound method c omment() должен вызываться GetPostView например, в качестве первого аргумента (получил WSGIRequest экземпляра вместо)
Я новичок в Django, и я не мог найти любую другую ситуацию, так мой, чтобы помочь мне.
** Решение **
вложу решение в моем вопросе, потому что Даниил заслуживает кредита и очков. После его ответа, я решил ее, делая это:
"""
GetPostView
"""
class GetPostView(TemplateView):
"""
Render the view for a specific post and lists its comments
"""
template_name = 'blog/post.html'
def get(self, request, id):
return render(request, self.template_name, {
'post': Post.objects.get(pk = id),
'comments': Comment.objects.filter(post = id).order_by('-created_at'),
'form': CommentForm()
})
def write_comment(request, post_id):
"""
Write a new comment to a post
"""
if request.method == 'POST':
form = CommentForm(request.POST)
if form.is_valid():
post = Post.objects.get(pk = post_id)
post.n_comments += 1
post.save()
comment = Comment()
comment.comment = request.POST['comment']
comment.created_at = timezone.now()
comment.modified_at = timezone.now()
comment.post_id = post_id
comment.user_id = 2
comment.save()
else:
form = CommentForm()
return redirect(reverse('blog:post', args = (post_id,)))
И в новом url
:
app_name = 'blog'
urlpatterns = [
url(r'^$', views.IndexView.as_view(), name = 'index'),
url(r'^categories/$', views.CategoriesView.as_view(), name = 'categories'),
url(r'^post/(?P<id>[0-9]+)/$', views.GetPostView.as_view(), name = 'post'),
url(r'^post/(?P<post_id>[0-9]+)/comment$', views.write_comment)
]
Хотя есть много вещей, чтобы сделать, чтобы сделать его идеальным, как только позволяют комментарии, когда есть пользователь вошел в систему, это хороший старт.
Не могли бы вы предоставить остальную часть трассы? – jonrsharpe