2010-12-16 10 views
1

내 작은 프로젝트에서 내 검색 기능을 확장하려고합니다. 지금은 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") 

search.html에

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

도움을 주시면 대단히 감사하겠습니다!

다시 한번 감사

스티브

답변

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/

+0

빠른 응답을 주셔서 감사합니다. 그 코드를 넣으면, 이제/search/ 에 'TypeError'가 나타납니다. __init __()은 적어도 2 개의 인수 (주어진 1 개)를 취합니다. '오류가 발생합니다. 그것은 내 views.py의 form = SearchProjectForm()을 가리 킵니다. – TheLifeOfSteve

+0

생성자의 SearchProjectForm에 프로젝트를 전달해야합니다. 내 대답의 첫 번째 코드 줄 :-) 너무 양식의 두 번째 인스턴스에서 :) 그래서'form = SearchProjectForm (project)'. – gruszczy

+0

:) 나는 그것을 시도하고 프로젝트를 수행 할 때 이름 오류가 계속 발생했습니다. – TheLifeOfSteve