/处的FieldError。无法将关键字“textField”解析为字段

2024-05-04 21:27:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图为我的django应用程序做一个过滤方法。我在数据库中有一些字段,如用户名、名称、雇员ID等。现在我试图做一个过滤;这里有一个下拉列表,显示所有的字段(姓名、职务、雇员ID等)和一个文本区域,用于输入一些文本。应该根据下拉选择和文本区域中输入的数据进行筛选。执行此操作时,出现以下错误:FieldError at/filter/ 无法将关键字“textField”解析为字段。选项有:联系人编号、加入日期、职务、员工id、id、项目、用户名我将在此处粘贴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%} 

这是我的观点。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})    

型号.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很陌生。请帮我解决这个问题


Tags: 文本getvaluemodelsrequestfilterpostlength
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.


至于解决你的问题,你有几个。您正在尝试查找选项中指定的特定字段,但选项和字段之间没有关系。

为了让自己更容易,至少将标记的值设置为字段名。

<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')})

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

=)

如果我明白你想做什么,你用错了过滤器。若要使用给定查询(val3)筛选动态发布字段(val2),请尝试。

kwargs = {}
kwargs[val2] = val3

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

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

相关问题 更多 >