Я создал представление, которое отображает шаблон, и после отправки формы обновляет две модели.
На данный момент я проверяю только одну форму (is_valid()), но другая форма также очищается, хотя я не вызывал для них методы is_valid() или 'clean().
Мой вид:
def update_two_models_at_once(request):
if request.method == "POST":
form1 = Form1(request.POST)
form2 = Form2(request.POST)
if form1.is_valid():
#form1.save()
#post = form2.save(commit=False)
#post.save()
return HttpResponseRedirect(reverse('stock:forms'))
else:
form2 = Form2()
return render(request, 'update_models.html', {'form2': form2})
У меня есть оператор печати в Form2, и он выполняется каждый раз, когда я отправляю форму, даже если я пытаюсь проверить только Form1.
Что-то я делаю неправильно или что-то не хватает? Отслеживание назад ссылается на эту строку здесь:
return render(request, 'update_models.html', {'form2': form2})
Кажется, когда я впервые визуализирую страницу, все в порядке. Но как только я отправляю страницу, Form1 не проходит проверку (я специально сделал ее не проверяемой), и когда он снова отображает шаблон, он вызывает чистый метод для Form2. Что с этим делать? Сейчас я хочу только проверить и очистить Form1.
Обновлено:
Мой код Form2:
class Form2(forms.ModelForm):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
def clean(self):
cleaned_data = super().clean()
serial = cleaned_data.get('serial')
print(error)
class Meta:
model = Form2Model
fields = '__all__'
Проследите, как только будет достигнут print(error) при отправке моего шаблона:
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:\Python36\lib\site-packages\django\core\handlers\exception.py", line 35, in inner
response = get_response(request)
File "C:\Python36\lib\site-packages\django\core\handlers\base.py", line 128, in _get_response
response = self.process_exception_by_middleware(e, request)
File "C:\Python36\lib\site-packages\django\core\handlers\base.py", line 126, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "...\views.py", line 166, in update_two_models_at_once
return render(request, 'update_models.html', {'form': form})
File "C:\Python36\lib\site-packages\django\shortcuts.py", line 36, in render
content = loader.render_to_string(template_name, context, request, using=using)
File "C:\Python36\lib\site-packages\django\template\loader.py", line 62, in render_to_string
return template.render(context, request)
File "C:\Python36\lib\site-packages\django\template\backends\django.py", line 61, in render
return self.template.render(context)
File "C:\Python36\lib\site-packages\django\template\base.py", line 175, in render
return self._render(context)
File "C:\Python36\lib\site-packages\django\template\base.py", line 167, in _render
return self.nodelist.render(context)
File "C:\Python36\lib\site-packages\django\template\base.py", line 943, in render
bit = node.render_annotated(context)
File "C:\Python36\lib\site-packages\django\template\base.py", line 910, in render_annotated
return self.render(context)
File "C:\Python36\lib\site-packages\django\template\loader_tags.py", line 155, in render
return compiled_parent._render(context)
File "C:\Python36\lib\site-packages\django\template\base.py", line 167, in _render
return self.nodelist.render(context)
File "C:\Python36\lib\site-packages\django\template\base.py", line 943, in render
bit = node.render_annotated(context)
File "C:\Python36\lib\site-packages\django\template\base.py", line 910, in render_annotated
return self.render(context)
File "C:\Python36\lib\site-packages\django\template\loader_tags.py", line 67, in render
result = block.nodelist.render(context)
File "C:\Python36\lib\site-packages\django\template\base.py", line 943, in render
bit = node.render_annotated(context)
File "C:\Python36\lib\site-packages\django\template\base.py", line 910, in render_annotated
return self.render(context)
File "C:\Python36\lib\site-packages\django\template\defaulttags.py", line 307, in render
match = condition.eval(context)
File "C:\Python36\lib\site-packages\django\template\defaulttags.py", line 880, in eval
return self.value.resolve(context, ignore_failures=True)
File "C:\Python36\lib\site-packages\django\template\base.py", line 676, in resolve
obj = self.var.resolve(context)
File "C:\Python36\lib\site-packages\django\template\base.py", line 802, in resolve
value = self._resolve_lookup(context)
File "C:\Python36\lib\site-packages\django\template\base.py", line 843, in _resolve_lookup
current = getattr(current, bit)
File "C:\Python36\lib\site-packages\django\forms\forms.py", line 174, in errors
self.full_clean()
File "C:\Python36\lib\site-packages\django\forms\forms.py", line 377, in full_clean
self._clean_form()
File "C:\Python36\lib\site-packages\django\forms\forms.py", line 404, in _clean_form
cleaned_data = self.clean()
File "...\forms.py", line 80, in clean
print(error)
NameError: name 'error' is not defined
@DanielRoseman В моем методе очистки Form2. Когда я намеренно выдаю ошибку, я вижу, откуда был вызван чистый метод. Что происходит при рендеринге моего шаблона после неудачной проверки Form1.
Не могли бы вы показать трассировку, а также код Form2?
@DanielRoseman Я обновил свой вопрос. Дай мне знать, если тебе что-нибудь понадобится, спасибо.
Поскольку ошибка возникает при рендеринге формы, я думаю, что этот вопрос, stackoverflow.com/questions/17471844/…, является дубликатом. В случае подтверждения он может быть закрыт как таковой.
@Evert Я рассмотрел этот вопрос, но не знаю, как бы реализовать это в моем собственном коде. Какие-либо предложения? Я сам реализовал исходные параметры, но ничего не делает.






Где именно находится оператор печати? А какая обратная связь?