2012-04-10 11 views
7

स्थिति: मेरे पास एक ऐसा फॉर्म है जिसका उपयोग खोज के लिए किया जाता है और मैं उपयोगकर्ता के परिणामों को फ़िल्टर करने के लिए परिणाम पृष्ठ पर उसी फॉर्म को वापस कर देता हूं। कचरा इनपुट से छुटकारा पाने के लिए, मैंने एक क्लीन_xxx विधि लागू की है।Django सर्वोत्तम व्यवहार: फ़ॉर्म को कैसे साफ और प्रस्तुत करना

दुर्भाग्य से, परिणाम पृष्ठ पर कचरा इनपुट के साथ वापस लौटाया गया है, भले ही इसे साफ़ किया गया हो। मैं प्रदर्शित करने के लिए स्वच्छ डेटा कैसे प्राप्त कर सकता हूं?

  1. clean_xxx विधि में, सेट self.data.xxx = cleaned_xxx मूल्य
  2. reinitialize cleaned_data साथ एक नया रूप:

    यहाँ कुछ विचार कर रहे हैं।

forms.py:

SearchForm: 
    def clean_q(self): 
    q = self.cleaned_data.get('q').strip() 
    # Remove Garbage Input 
    sanitized_keywords = re.split('[^a-zA-Z0-9_ ]', q) 
    q = "".join(sanitized_keywords).strip() 

    #TODO: Fix 
    self.data['q'] = q 

    return q 

views.py

search_form = SearchForm(params, user=request.user) 
    if search_form.is_valid(): 
     # Build the Query from the form 
     # Retrieve The Results 

    else: 
     # For errors, no results will be displayed 
     _log.error('Search: Form is not valid. Error = %s' %search_form.errors) 

    response = { 
       'search_form': search_form... 
    } 

आपकी मदद के लिए धन्यवाद।

+6

अपना कोड दिखाएं: http://sscce.org/ – Marcin

+0

पुनर्नवीनीकरण काफी अच्छा दिखता है। पहला विकल्प कुछ बिंदु से एक हैक है। – ilvar

+0

@ मार्सिन मैंने आपके कोड को – Naqeeb

उत्तर

1

जो भी आप clean_xxx विधि से वापस लौटते हैं वह प्रदर्शित होगा। तो, उदाहरण के लिए:

forms.py:

class SearchForm(forms.Form): 
    def clean_q(self): 
     return "spam and eggs" 

ऊपर के उदाहरण क्षेत्र कहेंगे "स्पैम और अंडे" में।

यदि ऐसा नहीं होता है, तो बाधाएं आपकी विधि के सत्यापन तर्क में समस्याएं हैं।

+0

clean_q फ़ंक्शन ठीक काम करता है लेकिन समस्या यह है कि एक बार यह सत्यापित होने के बाद मैं वही खोज_फॉर्म लौटाता हूं और क्यू समान है। उदाहरण के लिए: q = Stackoverflow()()() clean_q = Stackoverflow फ़ॉर्म q को Stackoverflow()()() के रूप में प्रदर्शित करता है। पृष्ठ पर cleaned_data q प्रदर्शित करने का कोई बेहतर तरीका है? – Naqeeb

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