Как сделать привязку формы внутри Django UpdateView?

#django #django-forms

#django #django-forms

Вопрос:

У меня есть представление, вытекающее из UpdateView этого:

views.py

 class MyMixin(object):
    
  def get_form_kwargs(self):
       kwargs = super(MyMixin, self).get_form_kwargs()
       kwargs['request'] = self.request
       return kwargs


class MyView(MyMixin, UpdateView):
    model = MyModel
    form_class = MyForm

    def get_object(self, queryset=None):
        pk = self.kwargs.get('pk')
        return get_object_or_404(self.model, pk=pk)
 

urls.py

 url(r'^edit/(?P<pk>d )/3/

forms.py

 class MyForm(forms.ModelForm):
    # ...
    class Meta:
         model = MyModel
 

После запроса post я вижу, что ничего не происходит. Никаких ошибок и перенаправления на success_url. Я попытался отладить, и оказалось, что форма не привязана. Чтобы проверить это, я поставил точку останова в системном файле edit.py , который выглядит следующим образом:

 def post(self, request, *args, **kwargs):
    """
    Handles POST requests, instantiating a form instance with the passed
    POST variables and then checked for validity.
    """
    form = self.get_form()
    if form.is_valid():
        return self.form_valid(form)
    else:
        return self.form_invalid(form) 
 

Комментарии:

1. Форма ограничена в случае запроса POST, с тех пор она будет использовать request.POST and request.FILES . Ограниченная форма не означает, что вы используете экземпляр, который обычно выполняется автоматически

2. Я обновил вопрос. Это запрос post

3. вы, случайно, не исправили этот get_form_kwargs метод и т.д.? Можете ли вы создать фрагмент кода, который может воспроизвести проблему? Прямо сейчас похоже, что вы разделяете определенные фрагменты, но, возможно, их недостаточно, чтобы диагностировать проблему.

4. есть ли form у __init__ вас возможность "принять" request это? Я знаю, это начинает немного раздражать, но, похоже, существует какое-то несоответствие между вызывающим абонентом и вызываемым абонентом. Можете ли вы поделиться __init__ своим MyForm ?

5. можете ли вы поделиться __init__ тем MyForm , что есть ?

Ответ №1:

У меня была похожая ситуация, и это помогло заставить ее работать.

 def post(self, request, *args, **kwargs):
    form_class = self.get_form_class()
    form = self.get_form(form_class)
    if form.is_valid():
        return self.form_valid(form)
    else:
        return self.form_invalid(form
 

, views.MyView.as_view(), name='...'),

forms.py


После запроса post я вижу, что ничего не происходит. Никаких ошибок и перенаправления на success_url. Я попытался отладить, и оказалось, что форма не привязана. Чтобы проверить это, я поставил точку останова в системном файле edit.py , который выглядит следующим образом:


Комментарии:

1. Форма ограничена в случае запроса POST, с тех пор она будет использовать request.POST and request.FILES . Ограниченная форма не означает, что вы используете экземпляр, который обычно выполняется автоматически

2. Я обновил вопрос. Это запрос post

3. вы, случайно, не исправили этот get_form_kwargs метод и т.д.? Можете ли вы создать фрагмент кода, который может воспроизвести проблему? Прямо сейчас похоже, что вы разделяете определенные фрагменты, но, возможно, их недостаточно, чтобы диагностировать проблему.

4. есть ли form у __init__ вас возможность «принять» request это? Я знаю, это начинает немного раздражать, но, похоже, существует какое-то несоответствие между вызывающим абонентом и вызываемым абонентом. Можете ли вы поделиться __init__ своим MyForm ?

5. можете ли вы поделиться __init__ тем MyForm , что есть ?

Ответ №1:

У меня была похожая ситуация, и это помогло заставить ее работать.