Добавление и удаление в одном экземпляре django Formset
У меня есть набор форм, который в целом работает (Добавление, удаление, редактирование), но когда я решаю добавить и удалить (или наоборот) в одном экземпляре, набор форм выдает ошибку 'id': ['This field is required.']
.
Ниже приведены отпечатки request.POST
:
Когда это работает:
<QueryDict: {'csrfmiddlewaretoken': ['lnEG6qbrWRg4NdkKwg1UU86KTBuIgJIc4ZqJAWvZpASgxECnicmlUmVhJIInvqEJ'], 'form-TOTAL_FORMS': ['3'], 'form-INITIAL_FORMS': ['3'], 'form-MIN_NUM_FORMS': ['0'], 'form-MAX_NUM_FORMS': ['1000'], 'form-0-id': ['6'], 'form-0-year': ['2023'], 'form-1-id': ['7'], 'form-1-year': ['2024'], 'form-2-id': ['8'], 'form-2-year': ['2025']}>
Когда это не работает (я удалил 2024 и добавил 2026):
<QueryDict: {'csrfmiddlewaretoken': ['fh0mPGYzVt0AOjpE5Q9JuTp1zuqwNCuMYTMpjci7ocCMyKHhRMuau7eypBEb2jqj'], 'form-TOTAL_FORMS': ['3'], 'form-INITIAL_FORMS': ['3'], 'form-MIN_NUM_FORMS': ['0'], 'form-MAX_NUM_FORMS': ['1000'], 'form-0-id': ['6'], 'form-0-year': ['2023'], 'form-1-id': ['8'], 'form-1-year': ['2025'], 'form-2-id': [''], 'form-2-year': ['2026']}>
[{}, {}, {'id': ['This field is required.']}]
Модель:
class Year(models.Model):
year = models.CharField(max_length=100, null=True)
user = models.CharField(max_length=300, null=True, blank=True)
Формы:
YearFormset = forms.modelformset_factory(
Year,
fields=('year',),
extra=1,
widgets={
'year': forms.TextInput(
attrs={
'require': 'required',
'class': 'form-control',
'placeholder': 'Enter Year here'
})
}
)
Вид:
def year(request):
year_items = Year.objects.filter(user=1)
year_set = YearFormset(queryset=year_items)
year_set.extra = 0 if year_items else 1
context = {'years':year_set}
if request.method == 'POST':
print(request.POST)
submit_year = YearFormset(request.POST)
if submit_year.is_valid():
Шаблон:
<form method="POST">
{% csrf_token %}
<br>
{{ years.management_form }}
{% for year in years %}
<div class="form-row">
<div class="col-4">
<div class="input-group">
{{year.id}}
{{year.year}}
<button class="btn btn-success add-form-row">+</button>
</div>
<br>
</div>
</div>
{% endfor %}
<input type="submit" value="Update Years">
</form>