FieldError at /. Не удается разрешить ключевое слово «textField» в поле - PullRequest
1 голос
/ 03 марта 2011

Я пытаюсь сделать метод фильтра для моего приложения django.У меня есть несколько полей в БД, как, userName, обозначение, employeeID и т. Д.Сейчас я пытаюсь сделать фильтрацию;где есть раскрывающийся список показывает все поля (имя, обозначение, employeeID и т. д.) и текстовую область для ввода текста.Фильтрация должна выполняться на основе выбора раскрывающегося списка и данных, введенных в текстовую область.При этом я получил эту ошибку: FieldError в / filter / Не удается разрешить ключевое слово 'textField' в поле.Возможные варианты: contactNumber, dateOfJoin, обозначение, 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%} 

Это мои ВИДЫ.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()

Я совсем новичок в Джанго.Пожалуйста, помогите мне решить эту проблему

Ответы [ 3 ]

3 голосов
/ 03 марта 2011

Почему вы ожидаете, что django сможет волшебным образом сопоставить имя поля с именами, указанными в вашем шаблоне? Например, в вашей модели нет ничего, что называлось бы ни одним из элементов, перечисленных вами в опциях <select>.

Я считаю ошибку очень очевидной:

FieldError at / filter / Не удается разрешить Ключевое слово 'textField' в поле. Возможные варианты: contactNumber, dateOfJoin, обозначение, employeeID, id, project, userName

В вашей модели нет поля textField, но вы пытаетесь отфильтровать его.

Представьте себе SELECT textField FROM mytable - textField просто не существует.

... и текстовая область для ввода некоторых текст.


Что касается решения вашей проблемы, у вас есть несколько. Вы пытаетесь выполнить поиск по определенному полю, указанному в параметрах выбора, но между вариантами выбора и вашими полями нет никакой связи.

Чтобы упростить это для себя, как минимум, установите значения для ваших <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')})
2 голосов
/ 03 марта 2011

Если я понимаю, что вы пытаетесь сделать, вы используете фильтр неправильно.Чтобы отфильтровать динамическое размещенное поле (val2) по заданному запросу (val3), попробуйте.

kwargs = {}
kwargs[val2] = val3

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

значения параметров в вашем коде должны сопоставить модель, чтобы это работало.

1 голос
/ 03 марта 2011

Если у вас нет одного поля с именем «textField», вы не можете фильтровать ваши модели «EmployeeDetails». Вы можете фильтровать только модели «EmployeeDetails» с помощью доступных полей следующим образом: «contactNumber, dateOfJoin, обозначение, employeeID, id, project, userName».

=)

...