ModelForm with JSON field of list of dictionaries

My initial reaction to this is to wonder why you’re trying to specify this as a JSON data structure. If the content for the choices list is always those three attributes, you’d be better off making them a separate model with a ForeignKey back to the Assessment model (if that’s the actual name).

I don’t see any value in using a MultiWidget for this, I’d make this a form with three fields - and since you’re going to have multiple instances of this form, I would use a formset. (And, if the data were normalized, it would be an inline formset relating back to Assessment.)

However, as far as adding or deleting elements within the formset, it doesn’t matter what the underlying representation or data is for the form - these are both JavaScript functions being performed on the page.

When trying to get your feet under you for formsets, I’ve been referring people to this thread: Django formsets tutorials

One thing to keep in mind is that forms and models are two different types of objects with two separate and independent behaviors. Yes, they are designed to work together in specific ways, especially when you’re talking about model forms and formsets, but there’s nothing that requires they be used together in that way.

Also keep in mind that a form (or formset) is a Python object that has the behavior of being able to generate HTML. However, an HTML form is not a Django Form. You can create one HTML form from multiple Django forms. This means that a formset (or inline formset) does not need to be part of another Django Form for it to be displayed on the same page.