2011-03-03 44 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) 

您代碼中的選項值需要映射模型才能工作。

相關問題