Отключенное поле вызывает ошибку проверки формы в Django - PullRequest
0 голосов
/ 06 апреля 2020

В одном случае мне нужно повторно использовать одну и ту же 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 #

Очень признателен, если я смогу получить помощь от вас, ребята, по крайней мере, я должен знать, что мне здесь не хватало.

1 Ответ

0 голосов
/ 07 апреля 2020

Решение упоминалось в здесь . Поскольку HTML обрабатывает метод POST, все поля отключено не будут переданы бэкэнду, что приводит к ошибке проверки формы.

Решение № 1 решило мою проблему, просто, но пока нет элегантный код Тем не менее, решение №2 является более элегантным IMO, но не решило проблему.

...