Для чего на самом деле нужен Can Order в Django Formsets?

За последний день или около того я потратил изрядное количество времени на изучение поля can order в Django Formsets, но до сих пор не могу понять, для чего оно нужно. Очевидно, оно не обновляет базу данных... и оно помещает поле номера заказа в форму...., но кроме этого, для чего оно нужно?

Я не могу найти никакой полезной документации о том, как использовать это поле. Должен ли я написать Javascript, чтобы заставить это поле делать что-то действительно значимое?

Я получаю опцию удаления... и вы должны добавить код, чтобы удалить запись... Так я полагаю, я должен понимать, что то же самое требуется для поля can_order?

Простите, если это глупый вопрос, но я потратил больше времени, пытаясь разобраться в этом, чем это было бы разумно на данный момент.

Все, что он делает, это добавляет целочисленное поле ORDER к каждой форме в наборе форм, чтобы вы могли вручную упорядочить их после инстанцирования набора форм. Представьте, что у ваших форм есть заголовок с этими воображаемыми данными набора форм. Вы можете использовать ordered_forms для итерации каждой формы, проверки ее очищенных данных и изменения ее порядка перед возвращением формы в ваш контекст.

formset = ArticleFormSet(data)

if formset.is_valid():
    for form in formset.ordered_forms:
        if form.cleaned_data['title'] = 'My form title'
            form.cleaned_data['ORDER'] = 2
            form.save()

Функция can_order добавляет поле в набор форм, так же как и can_delete. Вам не нужен JavaScript, но вы можете использовать его, например, если вы используете JavaScript для перетаскивания форм в наборе форм. Вы можете сортировать их, а затем изменить атрибут name, чтобы отразить новый порядок, обратившись к конкретной форме, используя ее id в JavaScript.

Возможность can_order подобна возможности can_delete, в том смысле, что can_order` просто добавит следующее к каждой из форм в вашем наборе форм, где N = 0, 1, 2, 3, 4...

<input type="number" name="form-N-ORDER" id="id_form-N-ORDER">

Что вы можете сделать с этим без JavaScript? Добавьте поле order в вашу модель, и тогда вы сможете получить порядок форм в вашем посте, и установить поле order вашей модели равным этому.

Вернуться на верх