Field错误在/。无法将关键字“textField”解析为字段

时间:2011-03-03 11:01:30

标签: python django django-models django-templates django-views

我正在尝试为我的django应用程序执行过滤方法。我在db中有一些字段,如userName,names,employeeID等。现在我想做一个过滤;其中有下拉列表显示所有字段(名称,名称,employeeID等)和用于输入某些文本的文本区域。应根据下拉选项选择和在文本区域中输入的数据进行过滤。执行此操作时出现此错误: / error /中的FieldError 无法将关键字“textField”解析为字段。选项包括:contactNumber,dateOfJoin,names,employeeID,id,project,userName 我将在此处粘贴我的html和views.py。请帮我解决这个问题。

<form action="http://10.1.0.90:8080/filter/" method="POST">
Filter By: 
<select name="choices" onsubmit="document.forms[0].submit()" >
    <option value="">Select A Choice</option>
    <option value="Name">Name</option> 
    <option value="Designation" >Designation</option>
    <option value="EmployeeID" >EmployeeID</option>
    <option value="Project" >Project</option>
    <option value="Date Of Join" >Date Of Join</option> 
</select>
<input type="text" name="textField">
<input type="submit" value="Go">
</form>

{%for data in newData%}
{{ data.userName}}<br>
{%endfor%} 

这是我的VIEWS.PY

def filter(request):     
    val2=request.POST.get('choices')
    val3=request.POST.get('textField')
    print val2,val3
    newData = EmployeeDetails.objects.filter(choices=request.POST.get('choices'),textField=request.POST.get('textField'))
    return render_to_response('filter.html',{'newData':newData,'val2':val2,'val3':val3})    

MODELS.PY

class EmployeeDetails(models.Model):
    userName = models.CharField(max_length=200)
    designation = models.CharField(max_length=200)
    employeeID = models.IntegerField()
    contactNumber = models.CharField(max_length=200)
    project = models.CharField(max_length=200)
    dateOfJoin=models.TextField()

我对Django很新。请帮我解决这个问题

3 个答案:

答案 0 :(得分:3)

为什么期望django能够将字段名称神奇地映射到您在模板中指定的名称?例如,您的模型中没有任何内容称为您在<select>选项中列出的任何项目。

我发现错误非常自我解释:

   / filter /中的FieldError无法解析   关键字'textField'到字段中。   选择是:contactNumber,   dateOfJoin,names,employeeID,   id,project,userName

您的模型中没有textField字段,但您尝试对其进行过滤。

想象一下SELECT textField FROM mytable - textField就不存在了。

  

...以及用于输入一些文本区域的文本区域   文本。


至于修复你的问题,你有几个。您正在尝试对选项中指定的特定字段执行查找,但Choices与您的字段之间没有任何关系。

为了方便您自己,至少将<option>代码的值设置为字段名称。

<select name="choices" onsubmit="document.forms[0].submit()" >
    <option value="">Select A Choice</option>
    <option value="userName">Name</option> 
    <option value="designation" >Designation</option>
    <option value="employeeID" >EmployeeID</option>
    <option value="project" >Project</option>
    <option value="dateOfJoin" >Date Of Join</option> 
</select>

if request.GET.get('choices'):
    # prevent query on field ''
    EmployeeDetails.objects.filter(**{request.GET.get('choices'): \
          request.GET.get('textField')})

答案 1 :(得分:2)

如果我理解你想要做什么,那么你使用过滤器的方式是错误的。要使用给定查询(val3)过滤动态发布字段(val2),请尝试。

kwargs = {}
kwargs[val2] = val3

newData = EmployeeDetails.objects.filter(**kwargs)

您的代码中的选项值需要映射模型才能生效。

答案 2 :(得分:1)

如果您没有名为“textField”的字段,则无法过滤“EmployeeDetails”模型。您只能使用以下可用字段过滤“EmployeeDetails”模型:“contactNumber,dateOfJoin,designation,employeeID,id,project,userName”。

=)