#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
andrequest.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
andrequest.FILES
. Ограниченная форма не означает, что вы используете экземпляр, который обычно выполняется автоматически2. Я обновил вопрос. Это запрос post
3. вы, случайно, не исправили этот
get_form_kwargs
метод и т.д.? Можете ли вы создать фрагмент кода, который может воспроизвести проблему? Прямо сейчас похоже, что вы разделяете определенные фрагменты, но, возможно, их недостаточно, чтобы диагностировать проблему.4. есть ли
form
у__init__
вас возможность «принять»request
это? Я знаю, это начинает немного раздражать, но, похоже, существует какое-то несоответствие между вызывающим абонентом и вызываемым абонентом. Можете ли вы поделиться__init__
своимMyForm
?5. можете ли вы поделиться
__init__
темMyForm
, что есть ?
Ответ №1:
У меня была похожая ситуация, и это помогло заставить ее работать.