2009-12-29 6 views
5

प्रथम में बचाने के लिए, मैं इस question पर देखने की थी, लेकिन इसकी अधिक एक साल का। निश्चित रूप से अब उपयोगकर्ता द्वारा व्यवस्थापक में सेव बटन पर क्लिक करने के बाद Django 1.1.1 में फ़िल्टर चयन को आगे बढ़ाने का एक अच्छा तरीका है।कैसे संरक्षित करने के लिए फिल्टर चयन के बाद Django व्यवस्थापक

रिकॉर्ड के हजारों के साथ एक मेज, फ़िल्टरिंग आवश्यक है। और यदि कोई उपयोगकर्ता कई फ़िल्टर विकल्प बनाता है तो प्रयास को दोहराना नहीं चाहिए।

उत्तर

8

जवाब अब भी वही है: बॉक्स से बाहर, Django इस व्यवहार का समर्थन नहीं करता। पैच के साथ अंक ट्रैकर में कुछ टिकट हैं: #3777, #6903this comment में मिडलवेयर क्लास Django कोड को संशोधित किए बिना काम करता है।

+0

मुझे मिडलवेयर समाधान पसंद है। धन्यवाद! –

+0

अच्छा लगता है ... इच्छा है कि मैं एक से अधिक बार वोट दे सकता हूं :) –

+0

ग्रेट, मेरे उपयोगकर्ताओं के लिए एक बड़ा मुद्दा हल करता है! वह पैच 6 साल तक वहां बैठा है ... – Roger

0

एक और तरीका यह स्निपेट http://djangosnippets.org/snippets/2531/

Class Modeladmin_perso(admin.ModelAdmin): 
def add_view(self, request, *args, **kwargs): 
    result = super(Modeladmin_perso, self).add_view(request, *args, **kwargs) 

    # Look at the referer for a query string '^.*\?.*$' 
    ref = request.META.get('HTTP_REFERER', '') 
    if ref.find('?') != -1: 
     # We've got a query string, set the session value 
     request.session['filtered'] = ref 

    if request.POST.has_key('_save'): 
     """ 
     We only kick into action if we've saved and if 
     there is a session key of 'filtered', then we 
     delete the key. 
     """ 
     try: 
      if request.session['filtered'] is not None: 
       result['Location'] = request.session['filtered'] 
       request.session['filtered'] = None 
     except: 
      pass 
    return result 
""" 
Used to redirect users back to their filtered list of locations if there were any 
""" 
def change_view(self, request, object_id, extra_context={}): 
    """ 
    save the referer of the page to return to the filtered 
    change_list after saving the page 
    """ 
    result = super(Modeladmin_perso, self).change_view(request, object_id, extra_context) 

    # Look at the referer for a query string '^.*\?.*$' 
    ref = request.META.get('HTTP_REFERER', '') 
    if ref.find('?') != -1: 
     # We've got a query string, set the session value 
     request.session['filtered'] = ref 

    if request.POST.has_key('_save'): 
     """ 
     We only kick into action if we've saved and if 
     there is a session key of 'filtered', then we 
     delete the key. 
     """ 
     try: 
      if request.session['filtered'] is not None: 
       result['Location'] = request.session['filtered'] 
       request.session['filtered'] = None 
     except: 
      pass 
    return result 

अच्छी बात आप कुछ भी हैक करने की जरूरत नहीं है है उपयोग करने के लिए है।

0

यह सुविधा एक लंबे समय के लिए Django परियोजना (ticket 5 साल पहले खोला गया था) के लिए एक अनुरोध किया गया है।

सौभाग्य से यह कष्टप्रद व्यवहार ट्रंक में fixed था। इसे Django 1.6 में शामिल करने की अपेक्षा करें।

3

यह सुविधा 1.6 रिहाई के हिस्से के रूप Django में जोड़ा गया है और डिफ़ॉल्ट रूप से अब सक्षम है। यह release notes में वर्णित है:

ModelAdmin अब बनाने के बाद सूची दृश्य में फ़िल्टर को बरकरार रखता है, संपादन या किसी वस्तु को हटाने। Preserve_filters विशेषता को गलत पर सेट करके पिछले क्लियरिंग फ़िल्टर के व्यवहार को पुनर्स्थापित करना संभव है।

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