我正在Django中学习基于类的视图,我的CreateView正确加载了表单,并且当单击Submit时,它将重定向到创建的新对象的详细信息页面; UpdateView会执行相同的操作,但是单击“提交”时,会出现错误405。
这似乎是一个普遍的问题,我在这里针对类似问题找到了不同的解决方案,但没有一个对我有用。我被困了几天,所以真的很感谢任何提示。由于我正在学习,所以我想对为什么会发生这种情况进行一些解释,而不是我必须复制/粘贴的一些代码。 谢谢大家。
#my urls.py
app_name = 'articles'
urlpatterns = [
path('', ArticleListView.as_view(), name='article-list'),
path('create/', ArticleCreateView.as_view(), name='article-create'),
path('<int:id>/update', ArticleUpdateView.as_view(), name='article-update'),
path('<int:id>/', ArticleDetailView.as_view(), name='article-detail')
#models.py
class Article(models.Model):
title = models.CharField(max_length=120)
content = models.CharField(max_length=255)
def get_absolute_url(self):
return reverse("articles:article-detail", kwargs={"id": self.id})
# relevant part of views.py
class ArticleCreateView(CreateView):
template_name = 'blog/article_create.html'
form_class = ArticleForm
queryset = Article.objects.all()
def form_valid(self, form):
print(form.cleaned_data)
return super().form_valid(form)
class ArticleUpdateView(UpdateView):
template_name = 'blog/article_create.html'
form_class = ArticleForm
queryset = Article.objects.all()
def get_object(self):
id_ = self.kwargs.get("id")
return get_object_or_404(Article, id=id_)
def form_valid(self, form):
print(form.cleaned_data)
return super().form_valid(form)
<form action="." method="POST">
{% csrf_token %}
{{form.as_p }}
<input type="submit" value="Save" />
</form>