Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django表单搜索_Python_Django_Forms_Django Forms_Django Views - Fatal编程技术网

Python Django表单搜索

Python Django表单搜索,python,django,forms,django-forms,django-views,Python,Django,Forms,Django Forms,Django Views,我正在用django制作一个搜索表单,我正在努力处理我眼中的表单 我的代码: class SearchForm(forms.Form): name = forms.CharField(label="Name", max_length=64, required=False) ... <a few other fields> def search(request): if request.method == 'POST': form =

我正在用django制作一个搜索表单,我正在努力处理我眼中的表单

我的代码:

class SearchForm(forms.Form):
    name = forms.CharField(label="Name", max_length=64, required=False)
    ...
    <a few other fields>


def search(request):
    if request.method == 'POST':
        form = SearchForm(request.POST)
        if form.is_valid():
            name = form.cleaned_data['name']
            qdict = { 'name': name}
            q_objs = [Q(**{qdict[k]: form.cleaned_data[k]}) for k in qdict.keys() if form.cleaned_data.get(k, None)]
            search_results = Group.objects.select_related().filter(*q_objs)
            response = {'success' : search_results}
            return HttpResponse(simplejson.dumps(response, ensure_ascii=False), mimetype='application/javascript')
    else:
        form = SearchForm()
    return render_to_response("main/search.html", {'form': form},
      context_instance=RequestContext(request))
类搜索表单(forms.Form):
name=forms.CharField(label=“name”,max_length=64,required=False)
...
def搜索(请求):
如果request.method==“POST”:
表单=搜索表单(request.POST)
如果form.is_有效():
名称=表单。已清理的_数据['name']
qdict={'name':name}
q_objs=[q(**{qdict[k]:如果form.cleaned_data.get(k,None)]
搜索结果=Group.objects.select_related().filter(*q_objs)
响应={'success':搜索结果}
返回HttpResponse(simplejson.dumps(response,确保ascii=False),mimetype='application/javascript')
其他:
form=SearchForm()
返回render_to_响应(“main/search.html”,{'form':form},
上下文\实例=请求上下文(请求))
我得到这个错误: 无法将关键字u'NAME'解析为字段。选项包括:提交日期、id、名称、参数

我意识到这个字段是unicode的,并尝试用str(…)或encode('ascii',…)转换它,但它仍然给我同样的错误。我是django的新手,所以任何帮助都将不胜感激


感谢您找到错误代码替换此代码:

name = form.cleaned_data['name']
qdict = { 'name': name}
q_objs = [Q(**{qdict[k]: form.cleaned_data[k]}) for k in qdict.keys() if form.cleaned_data.get(k, None)]
search_results = Group.objects.select_related().filter(*q_objs)
通过这个:

q=None
for k,v in form.cleaned_data.items():
  if q:
    q &= Q( k = v )
  else:
    q = Q( k = v )
search_results = Group.objects.select_related().filter( q )
但是,要真正控制查询,需要逐个条件编写:

qs = []

name = form.cleaned_data['name']
if name:
  q_name = Q( name__contains = name )
  qs.append(q_name)

fromDate = form.cleaned_data['fromDate']
if fromDate:
  q_from = Q( date__gte = fromDate )
  qs.append(q_from)

toDate = form.cleaned_data['toDate']
if toDate:
  q_toDate = Q( date__gte = toDate )
  qs.append(q_toDate)

q=None
for x in qs:
  if q:
    q &= x
  else:
    q = x

search_results = Group.objects.select_related().filter(q)

要查找错误代码,请替换此代码:

name = form.cleaned_data['name']
qdict = { 'name': name}
q_objs = [Q(**{qdict[k]: form.cleaned_data[k]}) for k in qdict.keys() if form.cleaned_data.get(k, None)]
search_results = Group.objects.select_related().filter(*q_objs)
通过这个:

q=None
for k,v in form.cleaned_data.items():
  if q:
    q &= Q( k = v )
  else:
    q = Q( k = v )
search_results = Group.objects.select_related().filter( q )
但是,要真正控制查询,需要逐个条件编写:

qs = []

name = form.cleaned_data['name']
if name:
  q_name = Q( name__contains = name )
  qs.append(q_name)

fromDate = form.cleaned_data['fromDate']
if fromDate:
  q_from = Q( date__gte = fromDate )
  qs.append(q_from)

toDate = form.cleaned_data['toDate']
if toDate:
  q_toDate = Q( date__gte = toDate )
  qs.append(q_toDate)

q=None
for x in qs:
  if q:
    q &= x
  else:
    q = x

search_results = Group.objects.select_related().filter(q)
它抱怨(大写)
NAME
字段,根据错误消息的格式判断,触发它的是查询。我无法从您的代码中真正判断,但在某个时候,我认为您执行了以下等效操作:

Group.objects.filter(NAME='some_value')
如果组模型(您没有发布,因此这是一个有根据的猜测)包含一个小写的
名称
字段,则上面的查询将在尝试访问大写的
名称
字段时生成您发布的错误

所以我想它可以归结为:最终的查询是什么样子的?为了获得这方面的信息,danihp的评论已经为如何确定这一点提供了一个很好的分类。

它抱怨(大写)
NAME
字段,从错误消息的格式判断,是查询触发了它。我无法从您的代码中真正判断,但在某个时候,我认为您执行了以下等效操作:

Group.objects.filter(NAME='some_value')
如果组模型(您没有发布,因此这是一个有根据的猜测)包含一个小写的
名称
字段,则上面的查询将在尝试访问大写的
名称
字段时生成您发布的错误

所以我想它可以归结为:最终的查询是什么样子的?为了获得这方面的信息,danihp的评论已经为如何确定这一点提供了一个很好的细分