How to pass initial parameter to django's ModelForm instance?

前端 未结 4 1614
伪装坚强ぢ
伪装坚强ぢ 2021-01-31 05:01

The particular case I have is like this:

I have a Transaction model, with fields: from, to (both are ForeignKeys to auth.Use

相关标签:
4条回答
  • 2021-01-31 05:23

    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
    
    0 讨论(0)
  • 2021-01-31 05:28

    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.

    0 讨论(0)
  • 2021-01-31 05:30

    In http://www.djangobook.com/en/2.0/chapter07/ , the section Setting Initial Values describes how to use the initial parameter to the Form constructor. You may also do extra stuff in the __init__ method of your derived Form.

    0 讨论(0)
  • 2021-01-31 05:49

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

    0 讨论(0)
提交回复
热议问题