2016-06-23 8 views
-1

Ich habe ein Formular in Django, das zwei Textfelder hat. Der Benutzer kann die Werte eingeben und das Formular absenden.Ist es in Django möglich, zusätzliche Felder in form.py hinzuzufügen, wenn das Formular übermittelt wird?

Jetzt möchte ich eine Funktionalität mit jquery erstellen, wo der Benutzer auf eine Schaltfläche klicken und zusätzliche Eingabefelder mit zusätzlichen Werten hinzufügen kann.

Die Anzahl der zusätzlichen Eingabefelder ist nicht vordefiniert. Meine Frage ist, ob es in Django eine Möglichkeit gibt, diese zusätzlichen Felder so zu erstellen, dass sie Teil des Formulars werden. Ist das möglich?

+0

wow. Es gibt andere Fragen mit ähnlichem Thema und sie werden stattdessen upvoted. Http://stackoverflow.com/questions/6142025/dynamically-add-field-to-a-form – user1919

Antwort

1

Wenn Sie sich für eine django Weg zur Lösung dieses Problems suchen, dann würde es so etwas wie folgt aussehen:

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) 

Wenn Sie einen jquery Lösung suchen, dann folgt die Sie tun können, auf Ihrem create_user ändern und ein Formular Antwort senden:

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)  

und dann mit jquery die Form html erhalten und fügt:

$('#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') 
     } 
    }); 
}); 
Verwandte Themen