[python] मैं Django में डेटटाइमफ़िल्ल्ड की तिथि कैसे फ़िल्टर कर सकता हूं?



Answers

YourModel.objects.filter(datetime_published__year='2008', 
                         datetime_published__month='03', 
                         datetime_published__day='27')

टिप्पणी के बाद // संपादित करें

YourModel.objects.filter(datetime_published=datetime(2008, 03, 27))

काम नहीं करते क्योंकि यह समय-समय पर ऑब्जेक्ट्स को डेटटाइम ऑब्जेक्ट बनाता है, इसलिए डेटाबेस में समय मेल नहीं खाता है।

Question

मैं DateTimeField को डेट के साथ तुलना करने की कोशिश कर रहा हूं। मेरा मतलब:

MyObject.objects.filter(datetime_attr=datetime.date(2009,8,22))

मुझे एक उत्तर के रूप में एक खाली क्वेरीसेट सूची मिलती है क्योंकि (मुझे लगता है) मैं समय पर विचार नहीं कर रहा हूं, लेकिन मुझे "किसी भी समय" चाहिए।

क्या ऐसा करने के लिए Django में कोई आसान तरीका है?

मेरे पास समय-समय पर निर्धारित समय है, यह 00:00 नहीं है।




यह __year, __month, और __day का उपयोग करने के समान परिणाम उत्पन्न करता है और मेरे लिए काम करता है:

YourModel.objects.filter(your_datetime_field__startswith=datetime.date(2009,8,22))



Mymodel.objects.filter(date_time_field__contains=datetime.date(1986, 7, 28))

उपरोक्त है जो मैंने उपयोग किया है। न केवल यह काम करता है, इसमें कुछ अंतर्निहित तार्किक समर्थन भी है।




माना जाता है कि सक्रिय_ऑन एक डेट ऑब्जेक्ट है, इसे 1 दिन तक बढ़ाएं और फिर रेंज करें

next_day = active_on + datetime.timedelta(1)
queryset = queryset.filter(date_created__range=(active_on, next_day) )



एक शानदार ब्लॉगपोस्ट है जो इसे यहां शामिल करता है: Django ORM में तिथियों और डेटाटाइम की तुलना करना

Django> 1.7, <1.9 के लिए पोस्ट किया गया सबसे अच्छा समाधान एक ट्रांसफॉर्म पंजीकृत करना है:

from django.db import models

class MySQLDatetimeDate(models.Transform):
    """
    This implements a custom SQL lookup when using `__date` with datetimes.
    To enable filtering on datetimes that fall on a given date, import
    this transform and register it with the DateTimeField.
    """
    lookup_name = 'date'

    def as_sql(self, compiler, connection):
        lhs, params = compiler.compile(self.lhs)
        return 'DATE({})'.format(lhs), params

    @property
    def output_field(self):
        return models.DateField()

फिर आप इसे अपने फिल्टर में इस तरह उपयोग कर सकते हैं:

Foo.objects.filter(created_on__date=date)

संपादित करें

यह समाधान निश्चित रूप से बैक एंड आश्रित है। लेख से:

बेशक, यह कार्यान्वयन SQL के आपके विशेष स्वाद पर निर्भर करता है जिसमें DATE () फ़ंक्शन होता है। MySQL करता है। तो SQLite करता है। दूसरी ओर, मैंने व्यक्तिगत रूप से PostgreSQL के साथ काम नहीं किया है, लेकिन कुछ googling मुझे विश्वास है कि यह एक DATE () समारोह नहीं है। तो यह सरल कार्यान्वयन ऐसा लगता है जैसे यह कुछ हद तक बैकएंड-निर्भर होगा।




एचएम .. मेरा समाधान काम कर रहा है:

Mymodel.objects.filter(date_time_field__startswith=datetime.datetime(1986, 7, 28))






Related