Расширяя мою функцию поиска - PullRequest
1 голос
/ 16 декабря 2010

Я пытаюсь расширить функцию поиска для моего небольшого проекта.Прямо сейчас у меня есть возможность поиска, используя поле 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 Ответ

1 голос
/ 16 декабря 2010

Вам необходимо передать проект в конструктор Form, а затем добавить поля поля, если необходимо:

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/

...