2014-11-06 57 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

相关问题