132
Such lookups are implemented in django.views.generic.date_based
as follows:
{'date_time_field__range': (datetime.datetime.combine(date, datetime.time.min),
datetime.datetime.combine(date, datetime.time.max))}
Because it is quite verbose there are plans to improve the syntax using __date
operator. Check β#9596 Comparing a DateTimeField to a date is too hardβ for more details.
119
YourModel.objects.filter(datetime_published__year='2008',
datetime_published__month='03',
datetime_published__day='27')
// edit after comments
YourModel.objects.filter(datetime_published=datetime(2008, 03, 27))
doest not work because it creates a datetime object with time values set to 0, so the time in database doesnβt match.
- [Django]-Using the reserved word "class" as field name in Django and Django REST Framework
- [Django]-How to get the name of current app within a template?
- [Django]-Remove pk field from django serialized objects
117
Here are the results I got with ipythonβs timeit function:
from datetime import date
today = date.today()
timeit[Model.objects.filter(date_created__year=today.year, date_created__month=today.month, date_created__day=today.day)]
1000 loops, best of 3: 652 us per loop
timeit[Model.objects.filter(date_created__gte=today)]
1000 loops, best of 3: 631 us per loop
timeit[Model.objects.filter(date_created__startswith=today)]
1000 loops, best of 3: 541 us per loop
timeit[Model.objects.filter(date_created__contains=today)]
1000 loops, best of 3: 536 us per loop
contains seems to be faster.
- [Django]-Django: Open uploaded file while still in memory; In the Form Clean method?
- [Django]-Django.db.utils.IntegrityError: duplicate key value violates unique constraint "django_migrations_pkey"
- [Django]-Are sessions needed for python-social-auth
77
Now Django has __date queryset filter to query datetime objects against dates in development version. Thus, it will be available in 1.9 soon.
- [Django]-How to pass django rest framework response to html?
- [Django]-How do I make many-to-many field optional in Django?
- [Django]-How to pass information using an HTTP redirect (in Django)
51
Mymodel.objects.filter(date_time_field__contains=datetime.date(1986, 7, 28))
the above is what Iβve used. Not only does it work, it also has some inherent logical backing.
- [Django]-How do I POST with jQuery/Ajax in Django?
- [Django]-How to test auto_now_add in django
- [Django]-How to implement followers/following in Django
48
As of Django 1.9, the way to do this is by using __date
on a datetime object.
For example:
MyObject.objects.filter(datetime_attr__date=datetime.date(2009,8,22))
- [Django]-Determine variable type within django template
- [Django]-Django: remove a filter condition from a queryset
- [Django]-IOS app with Django
27
This produces the same results as using __year, __month, and __day and seems to work for me:
YourModel.objects.filter(your_datetime_field__startswith=datetime.date(2009,8,22))
- [Django]-Are Django SECRET_KEY's per instance or per app?
- [Django]-Programmatically saving image to Django ImageField
- [Django]-How to pass django rest framework response to html?
9
You can do like this
MyObject.objects.filter(datetime_field__date=datetime.date(2009,8,22))
or if you want to filter between 2 dates
MyObject.objects.filter(
datetime_field__date__range=(datetime.date(2009,8,22), datetime.date(2009,9,22))
)
- [Django]-Add additional options to Django form select widget
- [Django]-Custom django admin templates not working
- [Django]-Django Queryset with year(date) = '2010'
8
assuming active_on is a date object, increment it by 1 day then do range
next_day = active_on + datetime.timedelta(1)
queryset = queryset.filter(date_created__range=(active_on, next_day) )
- [Django]-NumPy array is not JSON serializable
- [Django]-How do you dynamically hide form fields in Django?
- [Django]-Django switching, for a block of code, switch the language so translations are done in one language
7
You can filter by the Date as per as the date format is the same with your django date format. Default format is ISO YYYY-MM-DD
target_date = "2009-08-22"
qs = MyObject.objects.filter(datetime_attr__date=target_date)
- [Django]-Do we need to upload virtual env on github too?
- [Django]-OneToOneField() vs ForeignKey() in Django
- [Django]-How do I get the object if it exists, or None if it does not exist in Django?
4
Thereβs a fantastic blogpost that covers this here: Comparing Dates and Datetimes in the Django ORM
The best solution posted for Django>1.7,<1.9 is to register a transform:
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()
Then you can use it in your filters like this:
Foo.objects.filter(created_on__date=date)
EDIT
This solution is definitely back end dependent. From the article:
Of course, this implementation relies on your particular flavor of SQL having a DATE() function. MySQL does. So does SQLite. On the other hand, I havenβt worked with PostgreSQL personally, but some googling leads me to believe that it does not have a DATE() function. So an implementation this simple seems like it will necessarily be somewhat backend-dependent.
- [Django]-How to 'bulk update' with Django?
- [Django]-Django 2.0 β Not a valid view function or pattern name (Customizing Auth views)
- [Django]-Itertools.groupby in a django template
- [Django]-Django: remove a filter condition from a queryset
- [Django]-How to get the name of current app within a template?
- [Django]-How to convert JSON data into a Python object?
2
Here is an interesting techniqueβ I leveraged the startswith procedure as implemented with Django on MySQL to achieve the result of only looking up a datetime through only the date. Basically, when Django does the lookup in the database it has to do a string conversion for the DATETIME MySQL storage object, so you can filter on that, leaving out the timestamp portion of the dateβ that way %LIKE% matches only the date object and youβll get every timestamp for the given date.
datetime_filter = datetime(2009, 8, 22)
MyObject.objects.filter(datetime_attr__startswith=datetime_filter.date())
This will perform the following query:
SELECT (values) FROM myapp_my_object \
WHERE myapp_my_object.datetime_attr LIKE BINARY 2009-08-22%
The LIKE BINARY in this case will match everything for the date, no matter the timestamp. Including values like:
+---------------------+
| datetime_attr |
+---------------------+
| 2009-08-22 11:05:08 |
+---------------------+
Hopefully this helps everyone until Django comes out with a solution!
- [Django]-How do I raise a Response Forbidden in django
- [Django]-Best practices for adding .gitignore file for Python projects?
- [Django]-How to obtain and/or save the queryset criteria to the DB?
1
See the article Django Documentation
ur_data_model.objects.filter(ur_date_field__gte=datetime(2009, 8, 22), ur_date_field__lt=datetime(2009, 8, 23))
- [Django]-How to merge consecutive database migrations in django 1.9+?
- [Django]-Python Socket.IO client for sending broadcast messages to TornadIO2 server
- [Django]-How to add superuser in Django from fixture
- [Django]-What is related_name used for?
- [Django]-How to use Django ImageField, and why use it at all?
- [Django]-Getting the SQL from a Django QuerySet
0
Hm.. My solution is working:
Mymodel.objects.filter(date_time_field__startswith=datetime.datetime(1986, 7, 28))
- [Django]-Django 2.0 β Not a valid view function or pattern name (Customizing Auth views)
- [Django]-Django β how to visualize signals and save overrides?
- [Django]-Sending post data from angularjs to django as JSON and not as raw content
0
In Django 1.7.6 works:
MyObject.objects.filter(datetime_attr__startswith=datetime.date(2009,8,22))
- [Django]-Paginate relationship in Django REST Framework?
- [Django]-Class has no objects member
- [Django]-What's the difference between CharField and TextField in Django?
0
person = Profile.objects.get(id=1)
tasks = Task.objects.filter(assigned_to=person, time_stamp__year=person.time_stamp.utcnow().year)
all my model do have time_stamp so I used the person objects to obtain the current year
- [Django]-Django storages aws s3 delete file from model record
- [Django]-What's the idiomatic Python equivalent to Django's 'regroup' template tag?
- [Django]-Determine variable type within django template
0
You can filter between some day ranges
2016-01-01 00:00:00 <--> 2016-04-01 23:59:59.99999
User.objects.filter(date_joined__gte=datetime.combine(datetime.strptime('2016-
01-01', '%Y-%d-%m'), datetime.min.time()),
date_joined__lte=datetime.combine(datetime.strptime('2016-04-01', '%Y-%d-%m'),
datetime.max.time())).count()
2016-01-01 00:00:00 <--> 2016-01-14 00:00:00
User.objects.filter(date_joined__gte='2016-01-01', date_joined__lte='2016-1-14').count()
- [Django]-Django β How to pass several arguments to the url template tag
- [Django]-Embed YouTube video β Refused to display in a frame because it set 'X-Frame-Options' to 'SAMEORIGIN'
- [Django]-Django β How to set default value for DecimalField in django 1.3?
-1
Just as simple as that if you have a datetimefield your can use datetime.date.today()
context['now'] = Mymodel.objects.filter(date_time_field=datetime.date.today())
- [Django]-Why is factory_boy superior to using the ORM directly in tests?
- [Django]-How do I do a not equal in Django queryset filtering?
- [Django]-__init__() got an unexpected keyword argument 'mimetype'