2009-05-26 38 views

उत्तर

28

नेड करने के लिए आपके उत्तर के आधार पर यह लगता है जैसे आप टैग की एक सूची को बाहर करना चाहते हैं।

names_to_exclude = [o.name for o in objects_to_exclude] 
Foo.objects.exclude(name__in=names_to_exclude) 

है कि तुम क्या चाहते हो करता है: तो तुम सिर्फ in फिल्टर इस्तेमाल कर सकते हैं?

+0

मैं इसे ऑब्जेक्ट्स_to_exclude की सूची के साथ करता हूं, मैं o.name: ignore_tags = request.user.ignore_tags.all() case_list = Case.objects.exclude (tag__in = ignore_tags) का उपयोग नहीं करता हूं) – Johnd

3

कॉलिंग के साथ क्या गलत है कई बार बहिष्कृत? प्रश्न आलसी हैं, तब तक कुछ नहीं होता जब तक कि आप इससे डेटा खींचने का प्रयास नहीं करते हैं, इसलिए एक से अधिक बार .exclude() का उपयोग करने के लिए कोई नकारात्मक पक्ष नहीं है।

+0

मैं एक मॉडल एक टैग manytomany क्षेत्र है कि है। उपयोगकर्ता को अनदेखा टैग की बड़ी मात्रा हो सकती है। मैं उन वस्तुओं को गतिशील रूप से बाहर करना चाहता हूं जिन्हें उपयोगकर्ता देखना नहीं चाहता है। मुझे नहीं पता कि रन टाइम तक कितनी बार कॉल करना है। – Johnd

+0

क्या आप कृपया बता सकते हैं कि "प्रश्न आलसी हैं" और "इससे डेटा खींचें" का क्या मतलब है? Thnx – akki

+1

क्या आलसी मतलब यह है कि क्वेरी से वास्तव में उपयोग किए जाने तक डेटाबेस से कोई डेटा नहीं खींचा जाएगा। –

4

आप Q object साथ बहुत आसानी से कर सकते हैं:

from django.db.models import Q 

excludes = None 
for tag in ignored_tags: 
    q = Q(tag=tag) 
    excludes = (excludes and (excludes | q)) or q # makes sure excludes is set properly 
set_minus_excluded = Foo.objects.exclude(excludes) 

तुम भी बाहर निकालने के() के साथ गतिशील रूप से ऐसा करने में सक्षम होना चाहिए:

qs = Foo.objects.all() 
for tag in ignored_tags: 
    qs = qs.exclude(tag=tag) 
0

डैनियल Roseman के जवाब मुझे लगता है कि यह बेहतर होगा मूल्यों आप पाश के लिए के बजाय क्वेरीसमूह से सीधे की जरूरत है कि महंगा बड़े डेटा सेट IE पर हो सकता है पाने के लिए पर सुधार करने के लिए

names_to_exclude = objects_to_exclude.values_list('name') 
Foo.objects.exclude(name__in=names_to_exclude) 
-1

आप कोशिश कर सकते हैं ये भी।

exclude_list = ['A', 'B', 'C'] qs = Foo.objects.exclude(items__in=exclude_list)

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