[Answered ]-Django Forms – How would I implement a form that dynamically changes its fields depending on model objects in the database?

1👍

There are two possibilities:

model formsets and using a forms.ModelMultipleChoiceField with a CheckBoxSelectMultiple widget.

formsets

forms.py:

from django.forms import modelformset_factory

from yourapp.models import ActiveCertification


ActiveCertificationFormSet = modelformset_factory(ActiveCertification, fields=('certification', 'value',))

views.py

from django.shortcuts import render
from yourapp.forms import ActiveCertificationFormSet
from yourapp.models import ActiveCertification

def your_view(request, *args, **kwargs):
    active_certs = ActiveCertivication.objects.filter(user=request.user)
    context = {
        'certification_formset': ActiveCertificationFormSet(
            queryset=active_certs,
        ),
    }
    return render(request, 'certification_template.html', context)

ModelMultipleChoiceField

from django import forms

class CertificationForm(forms.Form):
    certifications = forms.ModelMultipleChoiceField(
        widget=forms.CheckBoxSelectMultiple(),
    )

See the respective documentation linked above for more details.

Leave a comment