2011-03-03 62 views
1

我正在尝试为我的django应用程序执行过滤器方法。我有一些像db,userName,指定,employeeID等字段。现在我正在尝试做一个过滤;下拉列表显示所有字段(姓名,指定,职员ID等)以及用于输入一些文本的文本区域。过滤应根据下拉选项选择和文本区域中输入的数据完成。虽然这样做我得到了这个错误:FieldError at/filter/ 无法将关键字'textField'解析为字段。选择是:contactNumber,dateOfJoin,指定,employeeID,id,项目,用户名我将粘贴我的HTML和views.py在这里。请帮我解决这个问题。在/处的FieldError。无法将关键字'textField'解析为字段

<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的。请帮我解决这个问题

+0

这并不完全清楚你想要做什么。您的模型中似乎没有名为'textField'的字段,那么您究竟想要过滤哪个字段?无论如何,这将有助于发布模型代码。 – 2011-03-03 11:27:42

+0

你从哪里获得POST的'指定'的价值?我没有在你的代码中看到它。另外,你确定EmployeeDetails有一个名为'textField'的字段(可能检查大写字母)? – gladysbixly 2011-03-03 11:27:46

+0

感谢您的回复..我用我的型号代码更新了问题。我没有名为textField或选择的模型中的字段。我在POST后获取了变量选择和textField中的过滤值。我怎样才能让它从我所有的分贝数据中过滤掉。 – 2011-03-03 11:37:53

回答

3

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

我找出错误非常自我解释:

FieldError at /filter/ Cannot resolve keyword 'textField' into field. Choices are: contactNumber, dateOfJoin, designation, employeeID, id, project, userName

你不必在模型中textField场,但你试图过滤反对。

想象一下SELECT textField FROM mytable - textField只是不存在。

... and a text area for inputing some text.


至于修理你的问题,你有几个。您正试图对选项中指定的特定字段进行查找,但选择与字段之间没有关系。

为了让您更容易,至少将<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

如果你没有一个叫做“textField”的字段,你不能过滤你的“EmployeeDetails”模型。您只能通过可用字段筛选“EmployeeDetails”模型:“contactNumber,dateOfJoin,指定,employeeID,id,项目,用户名”。

=)

2

如果我明白你正在尝试做的,你正在使用过滤器以错误的方式。使用给定查询(val3)尝试过滤动态发布字段(val2)。

kwargs = {} 
kwargs[val2] = val3 

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

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

相关问题