Model:
class ParticipantForm(forms.ModelForm):
member_name = forms.CharField(disabled=True, max_length=40, widget=forms.TextInput(attrs={'class': 'event-table-data'}))
status = forms.ChoiceField(choices=StatusChoices, widget=forms.Select(attrs={'class': 'popup-select-button'}))
comment = forms.CharField(max_length=400, widget=forms.Textarea(attrs={'class': 'card-textarea'}))
class Meta:
model = Participant
fields = ["member_name", "status","comment"]
View:
def event_edit(request, roster_id, event_id): # todo: just get event from roster?
event = get_object_or_404(Event, pk=event_id)
roster = get_object_or_404(Roster, pk=roster_id)
for p in event.participants.all():
print("--- member_name: {}, status: {}, comment: {}".format(p.member_name, p.status, p.comment))
ParticipantFormSet = formset_factory(ParticipantForm, extra=0)
form_values = event.participants.all().values()
print("--- form values: ", form_values)
form_data = {'form-TOTAL_FORMS': len(form_values),'form-INITIAL_FORMS': '0'}
formset = ParticipantFormSet(form_data, initial=form_values)
for form in formset:
print("--- form.is_valid: ", form.is_valid())
print("--- form: ", form)
context = {
'roster': roster,
'event': event,
'event_details_form': EventDetailsForm(instance=event),
'participant_formset': ParticipantFormSet(form_data, initial=form_values),
'status_choices': StatusChoices
}
return render(request,'tss/event_edit.html',context)
Result: each of the forms is invalid, due to âThis field is required.â errors. The form_values
var, used for the initial=
parameter, looks correct. Not sure whatâs going on here.