2010-06-08 16 views
9

मैं एक django पृष्ठ थूकने की कोशिश कर रहा हूं जो कि उनके द्वारा बनाए गए वर्ष तक सभी प्रविष्टियों को सूचीबद्ध करता है। तो, उदाहरण के लिए:Django: * केवल * वर्ष मूल्य द्वारा डेटाटाइम फ़ील्ड फ़िल्टरिंग?

2010:

  • नोट 4

  • नोट 5

  • नोट 6

2009:

  • नोट 1

  • नोट 2

  • नोट 3

यह और अधिक मुश्किल मेरी अपेक्षा से होता साबित कर रहा है। मॉडल डेटा आता है जहाँ से नीचे है:

class Note(models.Model): 
    business = models.ForeignKey(Business) 
    note = models.TextField() 
    created = models.DateTimeField(auto_now_add=True) 
    updated = models.DateTimeField(auto_now=True) 
    class Meta: 
     db_table = 'client_note' 

    @property 
    def note_year(self): 
     return self.created.strftime('%Y') 

    def __unicode__(self): 
     return '%s' % self.note 

मैं कुछ अलग अलग तरीकों की कोशिश की है, लेकिन बाधा दौड़ में नीचे हर पथ चलाने के लिए लग रहे हैं। मैं एक प्रभावी 'समूह द्वारा' विधि का अनुमान लगा रहा हूं, यह चाल (पोस्टग्रेस डीबी बैकएंड) करेगा, लेकिन मुझे लगता है कि यह किसी भी Django कार्यक्षमता को समर्थन नहीं दे रहा है। मैंने डेटाबेस से अलग-अलग वर्षों की कोशिश करने की कोशिश की लेकिन मुझे केवल साल के मूल्य से डेटाटाइम फ़ील्ड को फ़िल्टर करने का एक तरीका ढूंढने में संघर्ष हुआ। अंत में, मैंने note_year @property जोड़ने का प्रयास किया लेकिन क्योंकि यह व्युत्पन्न हुआ है, मैं उन मानों को फ़िल्टर नहीं कर सकता।

ऐसा करने के लिए एक शानदार तरीका के लिए कोई सुझाव? मुझे लगता है कि यह बहुत सरल होना चाहिए, लेकिन मेरे पास एक हेक्वावा समय है। किसी भी विचार की बहुत सराहना की।

उत्तर

25

या तो कस्टम एसक्यूएल का निर्माण या उपयोग

date_list = Note.objects.all().dates('created', 'year') 

for years in date_list: 
    Note.objects.filter(created__year = years.year) 

इस तरह यह तारीख आधारित सामान्य विचारों में किया जाता है।

+0

* * हंसते हुए कहते हैं कर सकते हैं ' टी मानते हैं कि यह आसान था; इस तरह की कार्यक्षमता की तलाश में घंटों बिताए। बहुत धन्यवाद। – PlankTon

-1

सिर्फ साल मूल्य

द्वारा datetime क्षेत्रों को छानने के लिए सबसे अच्छा तरीका होगा

@property डीईएफ़ note_year (स्वयं): वापसी self.created.year

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