Общий вид Django: не сохранять данные HTML-формы в базу данных

У меня есть приложение библиотеки Django с несколькими книгами и авторами, вот html-форма /author/create, используемая администратором для создания/обновления сведений об авторе (имя, фамилия, доб, изображение профиля), ссылаясь на приложение библиотеки 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-форме выше, он должен перенаправить на страницу автора/идентификатора (упомянутую в Success_url), однако главная проблема заключается в том, что новый автор не создается в первую очередь.< /strong> Я не уверен, как сохраняются данные html-формы, сохраняются ли они вообще, потому что страница перенаправляется на Success_url.

Код взят из MDN: https://developer.mozilla.org/en-US/docs/Learn/Server-side/Django/Forms


person Simran    schedule 12.12.2018    source источник
comment
Вам нужно будет объяснить немного яснее. Какое действие вы пытаетесь выполнить, создать или обновить? По какому именно URL-адресу вы переходите, чтобы увидеть форму, куда она отправляется и куда перенаправляется?   -  person Daniel Roseman    schedule 12.12.2018
comment
Администратор должен создать нового автора с помощью author_form.html, и при нажатии кнопки отправки он должен быть перенаправлен на определенную страницу автора (чего не происходит)   -  person Simran    schedule 12.12.2018
comment
Это не ответило ни на один из моих вопросов. author_form.html — это шаблон, а не URL. По какому URL вы перешли и что произошло? Что вы увидели вместо того, чтобы быть перенаправленным? Кроме того, что находится в части //remaining code... этого шаблона? Вы показываете ошибки проверки где-нибудь там?   -  person Daniel Roseman    schedule 12.12.2018
comment
при отправке формы загружается тот же author_form.html, и список авторов не обновляется   -  person Simran    schedule 12.12.2018


Ответы (1)


В вашей модели Author добавьте,

def get_absolute_url(self):
      return reverse('author_detail', kwargs={'pk': self.pk}) #add kwargs and app_name depending upon your requirement.

просмотры.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())

Если вы хотите перейти только на предыдущую страницу, то на этот вопрос SO есть ответ < /а>

person Bidhan Majhi    schedule 13.12.2018