【问题标题】:Is it possible in Django to add extra fields on the form.py, when the form gets submited?提交表单时,Django 是否可以在 form.py 上添加额外的字段?
【发布时间】:2016-10-26 04:53:09
【问题描述】:

我在 Django 中有一个表单,它有两个文本字段。用户可以键入值并提交表单。

现在我想使用 jquery 创建一个功能,用户可以在其中单击一个按钮并添加带有附加值的额外输入字段。

额外输入字段的数量未预定义。 我的问题是 Django 中是否有办法创建这些额外的字段,使它们成为表单的一部分。这可能吗?

【问题讨论】:

标签: django forms


【解决方案1】:

如果您正在寻找解决此问题的 django 方法,那么它看起来像这样:

def create_user(request):
    extra_questions = get_questions(request)
    form = UserCreationForm(request.POST or None, extra=extra_questions)
    if form.is_valid():
        for (question, answer) in form.extra_answers():
            save_answer(request, question, answer)
        return redirect("create_user_success")

    return render_to_response("signup/form.html", {'form': form})


class UserCreationForm(forms.Form):
    username = forms.CharField(max_length=30)
    password1 = forms.CharField(widget=forms.PasswordInput)
    password2 = forms.CharField(widget=forms.PasswordInput)

    def __init__(self, *args, **kwargs):
        extra = kwargs.pop('extra')
        super(UserCreationForm, self).__init__(*args, **kwargs)

        for i, question in enumerate(extra):
            self.fields['custom_%s' % i] = forms.CharField(label=question)

如果您正在寻找 jquery 解决方案,那么您可以执行以下操作,在您的 create_user 上修改并发送表单响应:

def create_user(request):
    extra_questions = get_questions(request)
    form = UserCreationForm(request.POST or None, extra=extra_questions)
    if form.is_valid():
        for (question, answer) in form.extra_answers():
            save_answer(request, question, answer)
        return redirect("create_user_success")

    form_html = form.as_ul() #returns a form in html
    return HttpResponse(form_html)    

然后使用 jquery 获取表单 html 并追加:

$('#submitform').click(function () {
    $.ajax({
        url: "getinfo.asp",
        data: {
            txtsearch: $('#appendedInputButton').val()
        },
        type: "POST",
        dataType: "html",
        success: function (data) {
            var result = $('<div />').append(data).find('#showresults').html();
            $('#showresults').html(result);
        },
        error: function (xhr, status) {
            alert("Sorry, there was a problem!");
        },
        complete: function (xhr, status) {
            //$('#showresults').slideDown('slow')
        }
    });
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-04
    • 1970-01-01
    • 2010-11-12
    • 1970-01-01
    • 2011-08-27
    • 2018-01-24
    相关资源
    最近更新 更多