2010-12-16 24 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つの引数をとります。私のviews.pyのform = SearchProjectForm()を指しています。 – TheLifeOfSteve

+0

コンストラクタのSearchProjectFormにプロジェクトを渡す必要があります。私の答えの最初のコード行:-)フォームの2番目のインスタンスでも:)ので、 'form = SearchProjectForm(project)'。 – gruszczy

+0

:)私はそれを試み、それを行うときにプロジェクトの名前エラーを取得し続ける – TheLifeOfSteve

関連する問題