Формы не удаляются из набора форм после проверки is_valid () - PullRequest
0 голосов
/ 01 ноября 2019

У меня есть формы, которые можно динамически добавлять и удалять из набора форм. На внешнем интерфейсе я отмечаю удаление, установив флажок «удалить», включенный в форму. form-0-DELETE добавляется в POST автоматически.

https://docs.djangoproject.com/en/2.2/topics/forms/formsets/#dealing-with-ordering-and-deletion-of-forms

Удаление формы из набора форм django

def edit(request):
    Formset = formset_factory(EditForm, extra=1, can_delete=True)

    if request.method == 'POST':
        formset =  Formset(request.POST)

        if formset.is_valid():
            cleaned_data = formset.cleaned_data
            print(cleaned_data)


        return render(request, '/edit.html', {'test': 'Post'})

    else:
        formset = Formset()

        return render(request, '/edit.html', {'formset': formset})

Вот часть возвращаемого набора форм:

data:

{u'form-MAX_NUM_FORMS': [u'1000'], u'form-0-test': [u'72'], u'form-0-DELETE': [u'on'], u'form-TOTAL_FORMS': [u'0'], u'form-INITIAL_FORMS': [u'0'], u'form-0-weight': [u'1']}

Удалено_форм:

[]

'test' и 'weight' являются входными значениями в формах. Вы можете увидеть «form-0-DELETE» там. Это означает, что событие удаления было добавлено в POST со значением по умолчанию «on». В одной из моих ссылок говорилось, что нужно изменить это значение на что-то, что можно оценить как true, установив для него значение True, true, и 1 ничего не изменило.

TOTAL-FORMS правильно равен 0, так как я отслеживаю добавления и удаления, но я ожидал, что удаленные_формы будут заполнены формой-0. Это проблема, когда у меня более 0 форм, поскольку я не знаю, что будет в очищенных данных, поскольку удаленные формы не записываются.

1 Ответ

1 голос
/ 01 ноября 2019

Решение было на переднем конце. TOTAL_FORMS - абсолютная сумма, удаленные формы включены. Удерживая это в правильном количестве, вместо вычитания -1 при удалении формы, удаленные_формы были заполнены правильно.

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