2010-12-27 17 views
5

मेरे पास एक क्वेरीसेट है जो उचित रूप से जटिल है, जिसे मैं वर्तमान में वस्तुओं की सूची प्राप्त करने के लिए एक ही दृश्य में उपयोग करता हूं।Django में आम प्रश्न कहां रखना है?

मैं कुछ अन्य विचारों में एक ही क्वेरीसेट का उपयोग करना चाहता हूं लेकिन कोड को कई बार कॉपी नहीं करना चाहूंगा। मैं क्वेरीजर को एक ही स्थान पर रखने के लिए एक प्रबंधक का उपयोग कर सकता हूं, और प्रत्येक दृश्य में का उपयोग को छोड़कर क्वेरी प्रत्येक पृष्ठ पर अलग तिथि पर निर्भर करता है।

जैसा कि मैं इसे समझता हूं, प्रबंधक आपको चर में जाने नहीं देते हैं ... इसलिए मैं सोच रहा हूं कि मुझे यह प्रश्न कहां रखना चाहिए ताकि इसे कई विचारों में दोहराना न पड़े। कोई विचार?

Fwiw, यह मेरा क्वेरीसमूह है, और published_date चर कि प्रत्येक पृष्ठ पर परिवर्तन है:

day_publications = Publication.objects.filter(
     Q(reading__end_date__gte=published_date) | Q(reading__end_date__isnull=True), 
     reading__start_date__lte=published_date, 
).select_related('series',) 

उत्तर

8

मुझे लगता है कि आप वास्तव में एक प्रबंधक का उपयोग करना चाहिए। मैं आदतन मेरी प्रबंधकों में इस तरह के तरीकों का उपयोग करें:

class CustomManager(models.Manager): 

    def get_records(self, city_slug, dt): 
     filter_kwargs = { 
      'city__slug': city_slug, 
      'date_from__lt': dt, 
      'date_to__gt': dt, 
     } 
     return super(CustomManager, self).get_query_set().filter(**filter_kwargs) 

तब मैं अपने मॉडल पर क्वेरी चलाने:

MyModel.objects.get_records(city.slug, datetime.now()) 
बेशक

, आप फिल्टर का एक और कॉल और श्रृंखला के साथ पालन कर सकते हैं इन या करना जो तुम्हे चाहिये। इस तरह के दृष्टिकोण के साथ कुछ भी गलत नहीं है, यही प्रबंधक यहां हैं :-)।

+0

डोह, ज़ाहिर है, धन्यवाद। मुझे प्रलेखन द्वारा फेंक दिया गया था यह सुझाव नहीं दे रहा है कि आप प्रबंधक कार्यों में मूल्यों को पारित कर सकते हैं। मुझे बस कोशिश करनी चाहिए! –

+0

को 'get_query_set' के बजाय' get_queryset' का उपयोग करना पड़ा। – jozxyqk

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