A Django form with two submit buttons. One requires fields and one requires fields

I think this should be a fairly simple question., I have one form of Django with two different submit buttons. The first submit button is only for SAVING for the database, what values ​​are entered in the form fields (so the user can return and finish the form later if he wants). I want form fields to NOT be required when this first submit button is clicked. When the user clicks the second submit button, all fields must be required. Is there any way to do this? Or do I just need to duplicate the form once for each submit button?

+4
source share
2 answers

The answer above works, but I liked it better: Changing a required field in a form based on a condition in views (Django)

I have two buttons:

<!-- simply saves the values - all fields aren't required unless the user is posting the venue -->
<input type="submit" name="mainForm" value="Save">

<!-- post the values and save them to the database - fields ARE required-->
<input type="submit" name="postVenue" value="Post Venue">

I do all the form fields required=Falseby default, and then have this in my view:

if 'postVenue' in request.POST:
    form = NewVenueForm(request.POST)
    required = 'postVenue' in request.POST
    form.fields['title'].required = required
    form.fields['category'].required = required
    # do this for every form field

elif 'mainForm' in request.POST:     
    form = NewVenueForm(request.POST)

Thanks everyone!

+4
source

If you manually write HTML for submit buttons, you can add an attribute nameand valuethat your Django application can use:

<button name="action" value="save">Save</button>
<button name="action" value="submit">Submit</button>

When the form is submitted, you can find out what action the user should perform.

class MyForm(forms.Form):

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

        # store user intended action in self.action
        self.action = data.get('action') if data else None

        # set form fields to be not required if user is trying to "save"
        if self.action == 'save':
            for field in self.fields:
                field.required = False
+3
source

All Articles