Django 1.6: соответствующий запрос не существует

#django #forms #drop-down-menu #get

#django #формы #выпадающее меню #получить

Вопрос:

Я пытаюсь реализовать выпадающую форму, которая фильтрует объекты в зависимости от выбора из выпадающего списка. У меня нет никаких проблем с этим, но это выдает мне ошибку, когда ничего не выбрано и нажата отправка. Я хочу, чтобы он ничего не фильтровал и просто выдавал весь список объектов, но я получаю следующую ошибку Specialization matching query does not exist в строке

 spec = Specialization.objects.get(name = s_name)
  

Вот шаблон, в котором у меня есть форма

 <form action="/doclistings/" method="GET" >
        <select class="form-control" id="selection" name="selection">
          <option><b>Choose a Speciality...</b></option>
          {% for value, text in form.selection.field.choices %}
            <option name="choicemade" value="{{ value }}">{{ text }}</option>
          {% endfor %}
          <!-- {% csrf_token %} -->
        </select>

        <span class="input-group-btn">
          <button class="btn btn-primary" type="submit"  name="submit" id="ss-submit">Find Doctors</button>
        </span>
      </form>
  

вот форма

 MY_CHOICES = (
    ('Dermatologist', 'Dermatologist'),
    ('Dentist', 'Dentist'),
    ('Orthopedist', 'Orthopedist'),
    ('Pediatrician', 'Pediatrician'),
)

class DropdownSelectionForm(forms.Form):
    selection = forms.ChoiceField(choices=MY_CHOICES, widget = forms.Select, required = False)
    genderselect = forms.ChoiceField(choices=GENDER_CHOICES, widget= forms.Select, required = False)
  

вот представление, в котором отображается выпадающая форма

 def index(request):
    d = getVariables(request,dictionary={'page_name': "Home"})
    if request.method == "POST":
        form = DropdownSelectionForm(request.POST)

        if form.is_valid():
            selection = form.cleaned_data['selection']

            return HttpResponseRedirect('/doclistings')
    else:
        form = DropdownSelectionForm()

    return render(request, 'meddy1/index.html', {'form': form})
  

Вот представление, которое отображает объекты на основе выбора

 def doclistings(request):
    d = getVariables(request)
    if request.method == "GET":

        s_name = request.GET['selection']

        if s_name == "":
            doctors = Doctor.objects.all().order_by('-netlikes')

        else:
            spec = Specialization.objects.get(name = s_name)
            doctors = Doctor.objects.filter(specialization = spec).order_by('-netlikes')

    else:
        return HttpResponseRedirect('/doclistings')


    d['doctors'] = doctors
    return render_to_response('meddy1/doclistings.html',d)
  

Комментарии:

1. Пожалуйста, покажите код вашей формы

2. Я добавил приведенный выше код формы

3. Пожалуйста, покажите MY_CHOICES

4. хм… Попробуйте добавить debug и посмотрите на переменную s_name в вашем представлении или просто распечатайте ее и убедитесь, что специализация с таким именем существует. Если все в порядке, пожалуйста, напишите всю обратную трассировку ошибки и значение s_name.

Ответ №1:

Вот почему вы должны использовать методы QueryDict следующим образом:

 s_name = request.GET.get('selection', None)
if not s_name:
    #if s_name is None
    #...
  

Таким образом, он будет корректно откатываться, если s_name отсутствует.