2014-11-06 85 views
0

我想要register/process Python中使用Django作爲用戶界面的1到5個用戶信息的列表。這不是典型的用戶註冊過程。我只是想處理用戶數據。用戶信息包含3個字段,名字,姓氏和性別。我能夠獲得一個用戶信息,但不確定如何收集第二,第三,第四或第五個用戶。如何在Django中處理多輸入表單字段

使用jQuery動態添加包含用戶信息的輸入框。它可以有1個條目或5個條目,具體取決於用戶是否添加更多字段。我試圖讓addName.html和views.py來處理列表,但這是不正確的。我的最終目標是利用這些數據,並在我的views.py說明它傳遞給我的Python程序

# Perform a Python Script using data gathered 
# registerName = addName ('first_name', 'last_name', 'gender') 

我欣賞的幫助,併爲長期職位道歉。我想說清楚並容易理解。

順便說一下,不要介意與女性名字的男性單選按鈕。這是爲了舉例。

models.py

# MySite/formtest/models.py 

from django.db import models 

# Create your models here. 
class Form (models.Model): 
    first_name = models.CharField (max_length = 20, null = False, blank = False) 
    last_name = models.CharField (max_length = 20, null = False, blank = False) 
    gender = models.CharField (max_length = 12, null = False, blank = False) 

    def __str__(self): 
     return self.first_name 

addName.html

<!DOCTYPE html> 
<html> 
<head lang="en"> 
    <meta charset="UTF-8"> 
    <title></title> 
</head> 
<body> 
    <form action="process" method="POST">{% csrf_token %} 
     <input type="radio" name="gender" value="Male">Male 
     <input type="radio" name="gender" value="Female">Female 

     <p><label for="firstName">First Name: </label> 
     <input id="firstName" type="text" name="firstName1" placeholder="John" required="True" maxlength="20"> 
     <label for="lastName">Last Name: </label> 
     <input id="lastName" type="text" name="lastName1" placeholder="Doe" required="True" maxlength="20"> 
     <input type="button" value="add"></p> 

     <p><label for="firstName">First Name: </label> 
     <input id="firstName" type="text" name="firstName2" placeholder="John" required="True" maxlength="20"> 
     <label for="lastName">Last Name: </label> 
     <input id="lastName" type="text" name="lastName2" placeholder="Doe" required="True" maxlength="20"> 
     <a href="#">remove</a></p> 
     <p><input type="submit" value="Process Name"></p> 
    </form> 
</body> 
</html> 

views.py

from django.shortcuts import render 
from django.http import HttpResponse, HttpResponseRedirect 
from django.core.context_processors import csrf 
from formtest.models import Form 

# Create your views here. 
def addNameDisplay (request): 
    c = {} 
    c.update (csrf (request)) 
    return render (request, 'formtest/addName.html') 

def Process (request): 
    i = 1 

    while (i <= 5): 
     Form (first_name = request.POST ['firstName[i]'], 
       last_name = request.POST ['lastName[i]'], 
       gender = request.POST ['gender']).save() 

     # Perform a Python Script using data gathered 
     # registerName = addName ('first_name', 'last_name', 'gender') 
     i += 1 

    return HttpResponseRedirect ('results') 

def Results (request): 
    nameInfo = Form.objects.all() 
    context = {'nameInfo': nameInfo} 
    return render (request, 'formtest/results.html', context) 

results.html

<!DOCTYPE html> 
<html> 
<head lang="en"> 
    <meta charset="UTF-8"> 
    <title>User Information</title> 
</head> 
<body> 
    {% for name in nameInfo %} 
    <li><b>First Name</b>: {{ name.first_name }} <b>Last Name</b>: {{ name.last_name }} <b>Gender</b>: {{ name.gender }}</li> 
    {% endfor %} 

    <a href="addname">Add More Names</a> 
</body> 
</html> 

回答

0

按照HTML標準規則,ID屬性必須是唯一的,所以你不能有多個ID =名字,這意味着你的ID應該INSTEAD增加你的名字ATTRS的。你的名字應該是相同的,例如所有的名字字段NAME應該是firstName。

這將創建一個名爲firstName的POST數組,並將您的每個ID作爲孩子。此名稱/ ID行爲/關係對於複選框/單選按鈕是正常的,但也適用於大多數/任何表單元素。

而不是使用while循環,你可以遍歷POST中的每個名稱(ed)attr。例如

for firstname in request.POST['firstName']: 

而且,在你看來,你可以檢查,以確保form.is_valid(),它可以Django的Forms文檔進行審查。

例如:

def my_view(request): 
    form = MyForm(request.POST or None) 
    if form.is_valid(): 
     try: 
      for blah in blah: 
       #this is where you would obtain FN, LN and GN for EACH "user" and put it into kwargs 
       kwargs = {} 
       form.save(**kwargs) 
     except: 
      #you are responsible for determining what to do on failure 
    context = {'form': form} 
    return render(request, 'register.html', context) 
+0

我做了我的HTML部分的一些變化,但後來我遇到了一些問題與「form.is_valid()」。由於我的模型不是Django表單的屬性,因此您的解決方案不起作用。我不得不改變我的模型和我的觀點。 – dreamzboy 2014-11-07 07:18:19

+0

那麼,希望我的輸入可以幫助你找到你的方式,無論路徑:)快樂的編碼。 – 2014-11-07 07:19:51

+0

它確實如此,我很感激。我是Python的新手,更不用說添加Django了。相當壓倒性的,所以我可能不知道我在做什麼。 – dreamzboy 2014-11-07 19:43:04

相關問題