How to submit two forms in one Update View

Viewed 36

I'm searching how to submit two forms with two different submit buttons in one view

class EditAvatarForm(forms.ModelForm):
    class Meta:
        model = Person
        fields = ('avatar',)

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.user_created = None

        avatar = forms.ImageField(required=True, )

        self.fields = OrderedDict(
            [
                ("avatar", avatar),

            ]
        )

    def clean_avatar(self):
        image = self.files.get('avatar')
        if image:
            try:
                creator = None
                if self.instance:
                    creator = self.instance
                    # ?That simple? Yes!:
                return ImageFile.objects.create(
                    image_file=image, creator=creator
                )
            except IOError:
                self.add_error('avatar', _("Unknown image type"))
        return None

    def clean(self):
        return super().clean()


class EditProfileForm(forms.ModelForm):

    class Meta:
        model = User
        fields = ("username", "first_name", "last_name", "email",)

this is the forms.py I would like to be able to change the avatar and the user informations in a single view. Person is a model related to User with user = models.OneToOneField( User, blank=True, null=True, on_delete=models.CASCADE ) and related to imageFile with avatar = models.ForeignKey( ImageFile, default=None, blank=True, null=True, related_name="persons", on_delete=models.SET_NULL, )

1 Answers

@Aymen_B- How about you use Ajax. When you are creating the request,add the form_name in the request payload in the ajax body. And in your UpdateView you can do something like this let's say I have form1 called 'testform' and form2 called testform2

if request.method == "POST" and request.is_ajax():
     if 'testform' in request.POST.get('form_name'):
         #your update logic for this form
     elif 'testform2' in request.POST.get('form_name'):
         #your update logic for this form
Related