[Django]-How to pass initial parameter to django's ModelForm instance?

37πŸ‘

βœ…

Use the following method (hopefully it’s clear enough):

class BackupForm(ModelForm):
    """Form for adding and editing backups."""

    def __init__(self, *args, **kwargs):
        systemid = kwargs.pop('systemid')
        super(BackupForm, self).__init__(*args, **kwargs)
        self.fields['units'] = forms.ModelMultipleChoiceField(
                required=False,
                queryset=Unit.objects.filter(system__id=systemid),
                widget=forms.SelectMultiple(attrs={'title': _("Add unit")}))

    class Meta:
        model = Backup
        exclude = ('system',)

Create forms like this:

form_backup = BackupForm(request.POST,
                         instance=Backup,
                         systemid=system.id)
form_backup = BackupForm(initial=form_backup_defaults,
                         systemid=system.id)

Hope that helps! Let me know if you need me to explain more in depth.

πŸ‘€lemonad

8πŸ‘

I ran into this problem as well, and this was my solution:

class ChangeEmailForm(forms.ModelForm):
    def __init__(self, user, *args, **kwargs):
        self.user = user
        super(ChangeEmailForm, self).__init__(*args, **kwargs)
        self.fields['email'].initial = user.email

    class Meta:
        model = User
        fields = ('email',)

    def save(self, commit=True):
        self.user.email = self.cleaned_data['email']
        if commit:
            self.user.save()
        return self.user
πŸ‘€Druska

2πŸ‘

Pass the user into the __init__ of the form, and then call super(…). Then set self.fields['from'].queryset to user.peers

πŸ‘€Amandasaurus

Leave a comment