2010-02-02 13 views
5

में शून्य परिणाम उत्पन्न करने वाले फ़िल्टर आइटम छुपाएं मुझे django-filter अनुप्रयोग के साथ कोई समस्या है: शून्य परिणामों का उत्पादन करने वाले आइटम को कैसे छिपाना है। मुझे लगता है कि ऐसा करने के लिए एक आसान तरीका है, लेकिन idk कैसे।django-filter

मैं एक ModelChoiceFilter पर LinkWidget उपयोग कर रहा हूँ, इस तरह:

provider = django_filters.ModelChoiceFilter(queryset=Provider.objects.all(), 
    widget=django_filters.widgets.LinkWidget) 

मैं क्वेरीसमूह को फ़िल्टर और केवल प्रदाता है कि कम से कम एक परिणाम का उत्पादन करेगा चयन करें, और दूसरों को बाहर निकालने है क्या करने की जरूरत । ऐसा करने का एक तरीका है?

+0

क्या है "idk":

import django_tables provider = django_filters.AllValuesFilter( widget=django_filters.widgets.LinkWidget) 

अधिक जानकारी यहां उपलब्ध है? कृपया मानक अंग्रेजी वर्तनी का प्रयोग करें। –

+0

आईडीके "मुझे नहीं पता", क्षमा करें –

उत्तर

3

असल में, आपको फ़िल्टर लागू करने की आवश्यकता है, और फिर उन्हें फिर से लागू करें, लेकिन नव-जेनरेट की गई क्वेरीसेट पर। कुछ इस तरह:

f = SomeFilter(request.GET) 
f = SomeFilter(request.GET, queryset=f.qs) 

अब आप सही क्वेरीसमूह हो तब आप प्रदाताओं गतिशील init में ओवरराइड कर सकते हैं:

def __init__(self, **kw): 
    super(SomeFilter, self).__init__(**kw) 
    self.filters['provider'].extra['queryset'] = Provider.objects.filter(foo__in=self.queryset) 

सुंदर नहीं है, लेकिन यह काम करता है। आपको शायद उन दो कॉलों को फ़िल्टर पर अधिक कुशल विधि में समाहित करना चाहिए।

+0

यह काम करता है, लेकिन __init__ की जरूरत है * args और ** kw, न केवल ** किलोवाट। बहुत बहुत धन्यवाद! –

+0

हाय मौरो, क्या आप कृपया यह बता सकते हैं कि आपको यह काम कैसे मिला। एक नमूना स्निपेट सहायक होगा। – sprezzatura

0

हो सकता है कि क्वेरीसेट 'वास्तविक' क्वेरीसेट ऑब्जेक्ट के बजाय कॉल करने योग्य हो। इस तरह, इसे गतिशील रूप से उत्पन्न किया जा सकता है। कम से कम यह अन्य मॉडलों के संदर्भ के लिए Django मॉडल में काम करता है।

कॉल करने योग्य आपके मॉडल में क्लास विधि हो सकता है।

0

यदि मैं आपका प्रश्न सही ढंग से समझता हूं तो मुझे विश्वास है कि आप AllValuesFilter का उपयोग करना चाहते हैं। http://github.com/alex/django-filter/blob/master/docs/ref/filters.txt#L77

+0

AllValuesFilter काम नहीं करता है (http://pastebin.com/pmw7gaxj), परिणाम फ़िल्टर "फ़िल्टर नहीं" होते हैं लेकिन यह सभी विकल्पों को दिखाता है, और लिंकविड्ज ठीक से काम नहीं करता है (यह संख्याओं की सूची दिखाता है पसंद का पाठ)। –

+0

इस शाखा के साथ AllValuesFilter आज़माएं: https://github.com/alanjds/django-filter/tree/fix-allvalues-queryset। बस प्रदान की गई क्वेरीसेट से फिल्टर करने के लिए पैच किया गया, पूरे मॉडल क्वेरीसेट नहीं। – alanjds