2012-07-13 10 views
5

मैं, मैं सिर्फ भूसे के ढेर के दस्तावेज़ से संशोधित Django भूसे के ढेर का उपयोग कर एक कस्टम खोज प्रपत्र बनाने के लिए कोशिश कर रहा हूँ:Django कस्टम प्रपत्र भूसे के ढेर

forms.py

from django import forms 
from haystack.forms import SearchForm 

class DateRangeSearchForm(SearchForm): 
    start_date = forms.DateField(required=False) 
    end_date = forms.DateField(required=False) 

    def search(self): 
     # First, store the SearchQuerySet received from other processing. 
     sqs = super(DateRangeSearchForm, self).search() 

     # Check to see if a start_date was chosen. 
     if self.cleaned_data['start_date']: 
      sqs = sqs.filter(pub_date__gte=self.cleaned_data['start_date']) 

     # Check to see if an end_date was chosen. 
     if self.cleaned_data['end_date']: 
      sqs = sqs.filter(pub_date__lte=self.cleaned_data['end_date']) 

     return sqs 

रहे हैं:

from django import forms 
from haystack.forms import HighlightedModelSearchForm 

class CustomSearchForm(HighlightedModelSearchForm): 
    title = forms.CharField(max_length = 100, required = False) 
    content = forms.CharField(max_length = 100, required = False) 
    date_added = forms.DateField(required = False) 
    post_by = forms.CharField(max_length = 100, required = False) 

    def search(self): 
     sqs = super(CustomSearchForm, self).search() 
     if self.cleaned_data['post_by']: 
      sqs = sqs.filter(content = self.cleaned_data['post_by']) 
     if self.cleaned_data['title']: 
      sqs = sqs.filter(content = self.cleaned_data['title']) 
     if self.cleaned_data['content']: 
      sqs = sqs.filter(content = self.cleaned_data['content']) 
     if self.cleaned_data['date_added']: 
      sqs = sqs.filter(content = self.cleaned_data['date_added']) 
     return sqs 

हैस्टैक .urls:

urlpatterns = patterns('haystack.views', 
    url(r'^$', search_view_factory(view_class = SearchView, form_class = CustomSearchForm), name='haystack_search'), 
) 

जब मैं यूआरएल के लिए जाना है, यह कहते हैं: खोज पर/AttributeError/

'CustomSearchForm' ऑब्जेक्ट कोई विशेषता 'cleaned_data'

तुम लोग मेरी मदद कर सकते है? thx

फिर मैं खोज विधि पर टिप्पणी करने की कोशिश करता हूं, लेकिन जब मैं कस्टम फ़ील्ड में कोई शब्द सबमिट करता हूं, तो परिणाम हमेशा कुछ भी नहीं होता है, केवल तभी जब मैं गैर-कस्टम फ़ील्ड में कोई शब्द सबमिट करता हूं, तो मैं परिणाम को प्राप्त कर सकता हूं, पहले से ही यह सब दिन समझने की कोशिश की है, कृपया मदद करें

उत्तर

9

मुझे पता है कि यह एक छोटा सा सवाल है, लेकिन यह देखने में दूसरों की मदद करने के लिए और एक ही चीज़ सोचने के लिए, इस तरह मैं इसे एक ही स्थिति में काम कर रहा हूं ।

इन पंक्तियों के साथ

कुछ:

... 
def search(self) 
    sqs=super(MyFooSearchForm, self).search() 

    if self.is_valid() and self.cleaned_data['foo']: 
     sqs = sqs.filter(foostuff__exact=self.cleaned_data['foo']) 

    return sqs 

असल में, मैं 'self.is_valid और' से पहले self.cleaned_data [ ''] यह मेरे लिए त्रुटि से छुटकारा मिला गयी। उम्मीद है की यह मदद करेगा।

तो,

def search(self): 
    sqs = super(CustomSearchForm, self).search() 
    if self.cleaned_data['post_by']: 
     sqs = sqs.filter(content = self.cleaned_data['post_by']) 
    if self.cleaned_data['title']: 
     sqs = sqs.filter(content = self.cleaned_data['title']) 
    if self.cleaned_data['content']: 
     sqs = sqs.filter(content = self.cleaned_data['content']) 
    if self.cleaned_data['date_added']: 
     sqs = sqs.filter(content = self.cleaned_data['date_added']) 
    return sqs 

बन जाएगा:

def search(self): 
    sqs = super(CustomSearchForm, self).search() 
    if self.is_valid() and self.cleaned_data['post_by']: 
     sqs = sqs.filter(content = self.cleaned_data['post_by']) 
    if self.is_valid() and self.cleaned_data['title']: 
     sqs = sqs.filter(content = self.cleaned_data['title']) 
    if self.is_valid() and self.cleaned_data['content']: 
     sqs = sqs.filter(content = self.cleaned_data['content']) 
    if self.is_valid() and self.cleaned_data['date_added']: 
     sqs = sqs.filter(content = self.cleaned_data['date_added']) 
    return sqs 

यह करने के लिए एक बेहतर तरीका हो सकता है, और मैं Django/अजगर के लिए एक रिश्तेदार शुरुआत कर रहा हूँ, लेकिन यह मेरे लिए काम किया।

+1

यहां एक बेहतर तरीका है, 'यदि इंस्टेंसेंस (वर्ग, एम्प्टीशर्चक्वायरसेट): वापसी एसक्यूएस' सुपर() 'कॉल के बाद करते हैं और सभी 'is_valid()' – nitely

संबंधित मुद्दे