【问题标题】:Django Generic Based view: not saving HTML form data to database基于 Django Generic 的视图:不将 HTML 表单数据保存到数据库
【发布时间】:2019-05-13 11:05:53
【问题描述】:

我有一个 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')

这些是网址模式

    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 表单中的提交按钮时,它应该重定向到作者/id 页面(在 success_url 中提到),但主要问题是 没有在第一个创建新作者地点。 我不确定如何保存 html 表单数据,是否首先保存,因为页面正在重定向到 success_url。

代码引用自 MDN:https://developer.mozilla.org/en-US/docs/Learn/Server-side/Django/Forms

【问题讨论】:

  • 你需要解释得更清楚一点。您要执行什么操作,创建或更新?您究竟会访问哪个 URL 以查看表单、提交到哪里以及重定向到哪里?
  • 管理员必须使用 author_form.html 创建一个新作者,并且在点击提交按钮时,它应该被重定向到作者的特定页面(这不会发生)
  • 那没有回答我的任何问题。 author_form.html 是一个模板,而不是 URL。你去了哪个网址,发生了什么?你看到了什么而不是被重定向?另外,该模板的//remaining code... 部分是什么?您是否在任何地方显示验证错误?
  • 在提交表单时,加载了相同的 author_form.html 并且作者列表没有得到更新

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


【解决方案1】:

在您的作者模型中添加,

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-02
    • 2017-03-06
    • 1970-01-01
    • 2016-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-22
    相关资源
    最近更新 更多