I need my ModelMultipleChoiceField to be prepopulated with query parameters from GET-request (/?extending=1&extending2). I know from this question that I can define get_initial() method for my view, returning my request. And everything works fine until I disable the ModelMultipleChoiceField, since I don't need it to be mutable.
This is my ModelForm class deduced from this answer:
class ExtensionForm(forms.ModelForm):
class Meta:
model = Record
fields = ['extending', 'name', 'description', 'picture', 'content', 'files']
extending = forms.ModelMultipleChoiceField(queryset=Record.objects.all())
def __init__(self, *args, **kwargs):
if kwargs.get('instance'):
initial = kwargs.setdefault('initial', {})
initial['extending'] = [el.pk for el in kwargs['instance'].extending.all()]
forms.ModelForm.__init__(self, *args, **kwargs)
self.fields['extending'].disabled = True
def save(self, commit=True):
instance = forms.ModelForm.save(self, False)
old_save_m2m = self.save_m2m
def save_m2m():
old_save_m2m()
instance.extending.clear()
instance.extending.add(*self.cleaned_data['extending'])
self.save_m2m = save_m2m
if commit:
instance.save()
self.save_m2m()
return instance
How do I update this class in order for my request to get there?