Django表单有两个提交按钮...一个需要字段,一个不需要

lau*_*nll 8 python django django-templates django-forms

我认为这应该是一个相当简单的问题...我有一个带有两个不同提交按钮的Django表单.第一个提交按钮仅用于向数据库保存在表单字段中输入的任何值(因此,如果用户需要,用户可以返回并稍后完成表单).我希望在单击第一个提交按钮时不需要表单字段.但是,当用户单击第二个提交按钮时,应该需要所有字段.有没有办法做到这一点?或者我只需要为每个提交按钮复制一次表单?

lau*_*nll 7

上面的答案有效,但我更喜欢这种方式:根据视图中的条件更改表单中的必填字段(Django)

我有两个按钮:

<!-- 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">
Run Code Online (Sandbox Code Playgroud)

required=False默认创建所有表单字段,然后在我的视图中显示:

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

elif 'mainForm' in request.POST:     
    form = NewVenueForm(request.POST)
Run Code Online (Sandbox Code Playgroud)

感谢大家!!


Der*_*wok 5

如果您手动为提交按钮编写 HTML,您可以添加Django 应用程序可以使用的nameandvalue属性:

<button name="action" value="save">Save</button>
<button name="action" value="submit">Submit</button>
Run Code Online (Sandbox Code Playgroud)

提交表单后,您将能够知道用户打算执行的操作。

class MyForm(forms.Form):

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

        # store user's 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
Run Code Online (Sandbox Code Playgroud)