В одном случае мне нужно повторно использовать одну и ту же ModelForm (имя EngagementForm) в нескольких случаях, но в некоторых случаях требуется отключить некоторые поля. Поэтому я применил отключено внутри моего forms.py:
# Override Field Initialisation, used for disabling fields
def __init__(self, *args, **kwargs):
schedule_check = kwargs.pop('schedule', False)
super(EngagementForm, self).__init__(*args, **kwargs)
# If schedule argument set to True, disable the following fields
if schedule_check:
fields = (
'project_code',
'project_name',
'user_credential',
)
for i in fields:
self.fields[i].disabled = True
self.fields[i].required = False
Однако Django выдает ошибку проверки при выполнении отправки. Form.is_valid () возвращает False, и при проверке ошибок с использованием Pdb я увидел следующее:
(Pdb) form.errors
{'project_code': ['This field is required.'],
'project_name': ['This field is required.'],
'user_credential': ['This field is required.']}
Проверка их значений, похоже, что отключен забрал их значения (или я мог бы здесь не так):
(Pdb) form['project_code'].value()
(Pdb)
Я пробовал несколько решений, найденных в Интернете (включая ввод начальных значений для каждого поля), но ни одно из них не могло решить проблему здесь.
К вашему сведению, это это код в views.py:
def schedule_form(request, pk):
engagement = get_object_or_404(Engagement, pk=pk)
if request.method == "GET":
context = {
'title': "Schedule Task",
'form': EngagementForm(
instance=engagement,
schedule=True,
),
}
return render(request, 'forms/engagement_form.html', context)
else: # POST request
form = EngagementForm(request.POST, instance=engagement)
# Django thinks the form is invalid #
if form.is_valid():
form.save(update_fields=['schedule_date'])
return redirect('index')
else:
# Shows error message
# Django executed this block upon submit #
Очень признателен, если я смогу получить помощь от вас, ребята, по крайней мере, я должен знать, что мне здесь не хватало.