我有一个包含几本书和作者的Django库应用程序,这是管理员使用的/ author / create html表单,用于创建/更新作者的详细信息(名字,姓氏,文件,个人资料图片),并引用MDN图书馆申请。
为此,我有一个基于通用类的视图:
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
]
这是用于创建/更新作者详细信息的author_form.html:
<form action="" method="post" class="form-horizontal" enctype="multipart/form-data">
{% csrf_token %}
//remaining code...
</form>
现在,在单击上面html表单中的Submit按钮时,它应该重定向到author / id页面(在success_url中提到),但是主要的问题是第一个创建新作者的人地点。 我不确定如何保存html表单数据,无论是否首先保存,因为页面都将重定向到sucess_url。
请帮助!谢谢。
从MDN引用的代码:https://developer.mozilla.org/en-US/docs/Learn/Server-side/Django/Forms
答案 0 :(得分:0)
在“作者”模型中添加
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())
如果您只想转到上一页,则this SO question has an answer