【问题标题】:Expanding my search function扩展我的搜索功能
【发布时间】:2010-12-16 20:00:19
【问题描述】:

我正在考虑尝试为我的小项目扩展搜索功能。现在我可以使用 char 字段进行搜索,但我想添加一些复选框。一些项目已被标记为 SRED 复选框,我还希望能够搜索仅限 SRED 的项目。

这是我当前的搜索设置。

models.py

class Project(models.Model):
...     
proj_name = models.CharField(max_length=255, verbose_name='Project Name')
pre_quote = models.CharField(max_length=3)
quote = models.IntegerField(max_length=10, verbose_name='Quote #', unique=True)
...
SRED = models.BooleanField()
...

Views.py

@login_required
def search(request):
if request.method == 'POST':
    form = SearchProjectForm(request.POST)
    if not form.is_valid():
         return render_to_response('project/search.html', {'form': form}, context_instance=RequestContext(request))
    else:
        projects = Project.objects.filter(proj_name__icontains = form.cleaned_data["text"])
        companies = Clients.objects.filter(client_name__icontains = form.cleaned_data["text"])
        return render_to_response('project/search.html', {'form': form, 'projects':projects, 'companies': companies}, context_instance=RequestContext(request))

form = SearchProjectForm()

return render_to_response('project/search.html', {'form': form}, context_instance=RequestContext(request))

forms.py

class SearchProjectForm(forms.Form):
    text = forms.CharField(label = "Search")

搜索.html

<form method="POST" action="">
{% csrf_token %}
{{form}}
<input type="submit" value="Search"/>
</form>
<h3>Search Results</h3>
...

任何帮助将不胜感激!

再次感谢

史蒂夫

【问题讨论】:

    标签: python django django-views


    【解决方案1】:

    您需要将项目传递给表单构造函数,然后根据需要添加框字段:

    form = SearchProjectForm(project, request.POST)
    

    和:

    class SearchProjectForm(forms.Form):
        text = forms.CharField(label = "Search")
    
        def __init__(self, project, *args, **kwargs):
          form = forms.Form.__init__(self, *args, **kwargs)
          if project.has_additional_fields():
            self.fields['additional_field'] = forms.SomeField()
          if project.only_additional_fields():
            self.fields['text'].required = False
    

    更多:http://jacobian.org/writing/dynamic-form-generation/

    【讨论】:

    • 您好,感谢您的快速回复。放入该代码后,我现在收到“TypeError at /search/ __init__() 需要至少 2 个参数(1 个给定)”错误。它指向:form = SearchProjectForm() of my views.py.
    • 您需要将项目传递给构造函数中的 SearchProjectForm。我的答案的第一行代码 :-) 在表单的第二个实例中 :) 所以form = SearchProjectForm(project).
    • :) 我试过了,但在执行此操作时不断收到项目名称错误
    • 您的搜索是在某个项目的上下文中执行的吗?您必须从数据库中检索此项目并将其传递到那里。
    • 是的,谢谢,我在发布最后一条评论后就知道了。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-22
    • 2017-05-19
    • 2011-01-09
    • 1970-01-01
    • 2013-01-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多