Django ModelFormset_Factory issue with rendering form
I've reviewed other questions and answers, worked through the django documentation and followed tutorials but I can't get my model formset to render correctly.
So far, I have the following working fine:
forms.py
class BulkUpdateForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(BulkUpdateForm, self).__init__(*args, **kwargs)
self.helper = FormHelper(self)
self.helper.form_method = "post"
self.helper.layout = Layout(
Row(
Column("slug"),
),
Row(
Column("registered"),
Column("start_date"),
Column("end_date"),
Column("achieved"),
Column("pfr_start"),
Column("pfr_end"),
),
)
self.fields["slug"].label = ""
class Meta:
model = LearnerInstance
fields = ["id","slug","registered","start_date","end_date","achieved","pfr_start","pfr_end",
]
widgets = {
"slug": forms.TextInput(
attrs={
"readonly": True,
},
),
}
template
<div class="container d-flex align-items-center flex-column pt-1">
<div class="card text-dark bg-light mb-3 p-3" style="max-width: 95rem;">
<br>
<form action="" method="post">
{% csrf_token %}
{{ formset.management_form }}
{% for form in formset %}
{% crispy form %}
<hr>
{% endfor %}
</div>
<input type="submit" name='registered', class="btn btn-primary" value="Update">
</form>
</div>
views.py
def bulk_update(request):
context = {}
selected_rows = request.POST.getlist("select") #posted from previous page with a table and checkboxes to select the queryset I need to update
BulkFormset = modelformset_factory(
LearnerInstance, form=BulkUpdateForm, edit_only=True, extra=0)
queryset = LearnerInstance.objects.filter(id__in=selected_rows)
formset = BulkFormset(queryset=queryset)
context["formset"] = formset
return render(request, "learner/bulk_update.html", context)
Results in the following output, which is what I hope to see:
However - when I add request POST
BulkFormset = modelformset_factory(
LearnerInstance, form=BulkUpdateForm, edit_only=True, extra=0
)
queryset = LearnerInstance.objects.filter(id__in=selected_rows)
if request.method == "POST":
formset = BulkFormset(
request.POST,
queryset=queryset,
)
if formset.is_valid():
formset.save()
else:
formset = BulkFormset(queryset=queryset)
context["formset"] = formset
I see the following:
Please could someone help me understand where I've gone wrong? I have tried to resolve this myself but always come to the same issue as soon as the post request is added to the view.