Django Generic Based视图:不将html表单数据保存到数据库

时间:2018-12-12 10:52:45

标签: django django-views django-generic-views

我有一个包含几本书和作者的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

1 个答案:

答案 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