2016-07-30 4 views
0

У меня есть просмотр обновления для обновления информации о профиле пользователя. На этой странице я добавил другую форму для изменения пароля, которая будет работать отдельно. Теперь я сделал, что я проверил, была ли изменена форма с измененным паролем, и предпринял необходимые действия.
Я хочу, чтобы, если пользователь изменил любые данные в форме обновления профиля и отправил форму изменения пароля с ошибками, я должен увидеть ошибки в форме пароля и измененные данные в форме обновления пользователя. Как это можно сделать?
P.S: Я думал, что, возможно, я смогу справиться с этим через запрос AJAX, в котором я могу отправить оба данных формы, сериализуя их. Но я хочу, чтобы он работал без вызова AJAX.Django обрабатывает несколько форм в режиме класса

ответ

0

«Что я хочу, так это то, что если пользователь изменил какие-либо данные в форме обновления профиля и отправил форму изменения пароля с ошибками, тогда я должен увидеть ошибки в форме пароля и измененные данные в обновлении пользователя . форма "

Одним из способов решения такой проблемы, чтобы отправить обе формы вместе:

<form method="post"> 
    {% csrf_token %} 

    <h2>Your User Update Form</h2> 
    {% user_update_form %} 

    <h2>Your Password Change Form</h2> 
    {% password_change_form %} 
</form> 

, а затем на ваш взгляд:

def get(self, request, *args, **kwargs): 
     # initialize both forms with prefixes 
     user_update_form = UserUpdateForm(prefix='user_update') 
     password_change_form = UserPasswordForm(prefix='password_change') 
     return self._render_form(user_update_form, password_change_form) 

    def post(self, request, *args, **kwargs): 
     # read forms from POST 
     user_update_form = UserUpdateForm(request.POST, prefix='user_update') 
     password_change_form = UserPasswordForm(request.POST, prefix='password_change') 

     # validate password form 
     if password_change_form.is_valid(): 
      # do something 
     else: 
      # password form has errors, so return both forms 
      return self._render_form(user_update_form , password_change_form) 

    def _render_form(self, user_update_form, password_change_form): 
     context = {'user_update_form': user_update_form, 'password_change_form': password_change_form} 
     return TemplateResponse(self.request, '**/your_template.html', context) 
+0

спасибо, но это не очень хороший вариант в долгосрочной перспективе. Предположим, если я использую третью форму где-то еще в шаблоне, где ее нельзя комбинировать, то что? –

Смежные вопросы