基于 Django 通用的视图:不将 HTML 表单数据保存到数据库
Django Generic Based view: not saving HTML form data to database
我有一个包含多本书和作者的 Django 图书馆应用程序,这里是管理员使用的 /author/create html 表单 create/update 作者的详细信息(名字,姓氏, dob,个人资料图片),引用 MDN 库应用程序。
我有一个基于Class的通用视图用于此目的:
class AuthorCreate(PermissionRequiredMixin, CreateView):
permission_required = 'is_superuser'
model = Author
fields = '__all__'
success_url = reverse_lazy('author-detail')
class AuthorUpdate(PermissionRequiredMixin, UpdateView):
permission_required = 'is_superuser'
model = Author
fields = ['first_name', 'last_name', 'date_of_birth', 'date_of_death']
success_url = reverse_lazy('author-detail')
class AuthorDelete(PermissionRequiredMixin, DeleteView):
permission_required = 'is_superuser'
model = Author
success_url = reverse_lazy('authors')
这些是 url 模式:
urlpatterns += [
path('author/create/', views.AuthorCreate.as_view(), name='author_create'), # redirects to author_form.html
path('author/<int:pk>/update/', views.AuthorUpdate.as_view(), name='author_update'), # redirects to author_form.html
path('author/<int:pk>/delete/', views.AuthorDelete.as_view(), name='author_delete'), # redirects to author_confirm_delete.html
]
这是 creating/updating 作者详细信息的 author_form.html:
<form action="" method="post" class="form-horizontal" enctype="multipart/form-data">
{% csrf_token %}
//remaining code...
</form>
现在,点击上面 html 表单中的提交按钮,它应该重定向到 author/id 页面(在 success_url 中提到),但是主要问题是 首先没有创建新作者。
我不确定 html 表单数据是如何保存的,是否首先保存了它,因为页面正在重定向到 success_url.
引用自 MDN 的代码:https://developer.mozilla.org/en-US/docs/Learn/Server-side/Django/Forms
在您的 Author 模型中添加,
def get_absolute_url(self):
return reverse('author_detail', kwargs={'pk': self.pk}) #add kwargs and app_name depending upon your requirement.
views.py
class AuthorCreate(PermissionRequiredMixin, CreateView):
permission_required = 'is_superuser'
model = Author
fields = '__all__'
class AuthorUpdate(PermissionRequiredMixin, UpdateView):
permission_required = 'is_superuser'
model = Author
fields = ['first_name', 'last_name', 'date_of_birth', 'date_of_death']
其他方式,如果您在 CreateView 和 UpdateView 中使用表单,
def form_valid(self, form):
self.object = form.save()
# ....
return HttpResponseRedirect(self.get_success_url())
如果只想转到上一页,则
我有一个包含多本书和作者的 Django 图书馆应用程序,这里是管理员使用的 /author/create html 表单 create/update 作者的详细信息(名字,姓氏, dob,个人资料图片),引用 MDN 库应用程序。
我有一个基于Class的通用视图用于此目的:
class AuthorCreate(PermissionRequiredMixin, CreateView):
permission_required = 'is_superuser'
model = Author
fields = '__all__'
success_url = reverse_lazy('author-detail')
class AuthorUpdate(PermissionRequiredMixin, UpdateView):
permission_required = 'is_superuser'
model = Author
fields = ['first_name', 'last_name', 'date_of_birth', 'date_of_death']
success_url = reverse_lazy('author-detail')
class AuthorDelete(PermissionRequiredMixin, DeleteView):
permission_required = 'is_superuser'
model = Author
success_url = reverse_lazy('authors')
这些是 url 模式:
urlpatterns += [
path('author/create/', views.AuthorCreate.as_view(), name='author_create'), # redirects to author_form.html
path('author/<int:pk>/update/', views.AuthorUpdate.as_view(), name='author_update'), # redirects to author_form.html
path('author/<int:pk>/delete/', views.AuthorDelete.as_view(), name='author_delete'), # redirects to author_confirm_delete.html
]
这是 creating/updating 作者详细信息的 author_form.html:
<form action="" method="post" class="form-horizontal" enctype="multipart/form-data">
{% csrf_token %}
//remaining code...
</form>
现在,点击上面 html 表单中的提交按钮,它应该重定向到 author/id 页面(在 success_url 中提到),但是主要问题是 首先没有创建新作者。 我不确定 html 表单数据是如何保存的,是否首先保存了它,因为页面正在重定向到 success_url.
引用自 MDN 的代码:https://developer.mozilla.org/en-US/docs/Learn/Server-side/Django/Forms
在您的 Author 模型中添加,
def get_absolute_url(self):
return reverse('author_detail', kwargs={'pk': self.pk}) #add kwargs and app_name depending upon your requirement.
views.py
class AuthorCreate(PermissionRequiredMixin, CreateView):
permission_required = 'is_superuser'
model = Author
fields = '__all__'
class AuthorUpdate(PermissionRequiredMixin, UpdateView):
permission_required = 'is_superuser'
model = Author
fields = ['first_name', 'last_name', 'date_of_birth', 'date_of_death']
其他方式,如果您在 CreateView 和 UpdateView 中使用表单,
def form_valid(self, form):
self.object = form.save()
# ....
return HttpResponseRedirect(self.get_success_url())
如果只想转到上一页,则