Getting initial on multiselect manytomany

For some reason, I can’t get initial choices to show based on a model instance with a manytomany relationship.

I can see that the selections for the multichoice are in-fact saving to the db when I post the form, and there are initials showing for other non-relational fields in the same form/model (i.e. charfields ommited from code below). But for some reason, the manytomany field initials won’t show.

I feel like a mixin I’m running is somehow rendering this form without the instance… even though I can see initial instance data on the non-relational fields. And due to that, it isn’t getting past the if check I have on via the init on the modelform.


class CultureModelForm(forms.ModelForm):
    class Meta:
        model = Culture
        fields = (
        help_texts = {
            'data_usage': _(''),
        widgets = {
            'data_usage': forms.SelectMultiple(),

    def __init__(self, *args, **kwargs):
        super(CultureModelForm, self).__init__(*args, **kwargs)
        initials = {}

                'data_usage': [ for o in list(self.instance.data_usage.all())]

        for field, initial in initials.items():
            self.fields[field].initial = initial

Scratch that – It is in-fact passing the initial manytomany selection data. But it is rendering them to the template as a list of instances of the manytomany relationship. Not as a list of pk’s per the above.

Never mind, worked it out. Getting late, and I’m tired.

Could you post the corresponding, working, code for reference?

The above works fine. I wasn’t handling the data within the template correctly.