【问题标题】:Django 1.6: Matching query does not existDjango 1.6:匹配查询不存在
【发布时间】:2014-07-05 20:01:50
【问题描述】:

我正在尝试实现一个下拉表单,该表单根据下拉列表中的选择过滤对象。我这样做没有任何问题,但是当没有选择任何内容并单击提交时,它会给我一个错误。我希望它不过滤任何内容,只提供对象的整个列表,但我在线收到以下错误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)

【问题讨论】:

  • 请显示您的表单代码
  • 我已经添加了上面的表单代码
  • 请出示MY_CHOICES
  • hm... 尝试添加调试并在您的视图中查看 s_name 变量,或者只是打印它并确保存在具有此类名称的专业化。如果一切正常,请写下所有错误的回溯和 s_name 值。

标签: django forms drop-down-menu get


【解决方案1】:

这就是为什么你应该像这样使用 QueryDict 方法:

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

这样,如果 s_name 不存在,它将正确回退。

【讨论】:

    猜你喜欢
    • 2015-01-28
    • 2022-01-05
    • 2020-10-15
    • 2016-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多