Skip to content

Commit 05a20b4

Browse files
committed
Add support for QuerySet.dates() and datetimes()
This was blocked on support for QuerySet.distinct() which was added in e04056e..
1 parent 4b48571 commit 05a20b4

File tree

4 files changed

+6
-88
lines changed

4 files changed

+6
-88
lines changed

django_mongodb_backend/compiler.py

-9
Original file line numberDiff line numberDiff line change
@@ -332,15 +332,6 @@ def cursor_iter(self, cursor, chunk_size, columns):
332332

333333
def check_query(self):
334334
"""Check if the current query is supported by the database."""
335-
if self.query.distinct:
336-
# This is a heuristic to detect QuerySet.datetimes() and dates().
337-
# "datetimefield" and "datefield" are the names of the annotations
338-
# the methods use. A user could annotate with the same names which
339-
# would give an incorrect error message.
340-
if "datetimefield" in self.query.annotations:
341-
raise NotSupportedError("QuerySet.datetimes() is not supported on MongoDB.")
342-
if "datefield" in self.query.annotations:
343-
raise NotSupportedError("QuerySet.dates() is not supported on MongoDB.")
344335
if self.query.extra:
345336
if any(key.startswith("_prefetch_related_") for key in self.query.extra):
346337
raise NotSupportedError("QuerySet.prefetch_related() is not supported on MongoDB.")

django_mongodb_backend/features.py

+3-75
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,10 @@ class DatabaseFeatures(BaseDatabaseFeatures):
6060
"db_functions.math.test_round.RoundTests.test_integer_with_negative_precision",
6161
# Truncating in another timezone doesn't work becauase MongoDB converts
6262
# the result back to UTC.
63+
"datetimes.tests.DateTimesTests.test_21432",
6364
"db_functions.datetime.test_extract_trunc.DateFunctionWithTimeZoneTests.test_trunc_func_with_timezone",
6465
"db_functions.datetime.test_extract_trunc.DateFunctionWithTimeZoneTests.test_trunc_timezone_applied_before_truncation",
66+
"timezones.tests.NewDatabaseTests.test_query_datetimes",
6567
# Unexpected alias_refcount in alias_map.
6668
"queries.tests.Queries1Tests.test_order_by_tables",
6769
# The $sum aggregation returns 0 instead of None for null.
@@ -272,81 +274,6 @@ def django_test_expected_failures(self):
272274
"update.tests.AdvancedTests.test_update_ordered_by_m2m_annotation",
273275
"update.tests.AdvancedTests.test_update_ordered_by_m2m_annotation_desc",
274276
},
275-
"QuerySet.dates() is not supported on MongoDB.": {
276-
"admin_changelist.tests.ChangeListTests.test_computed_list_display_localization",
277-
"admin_changelist.tests.ChangeListTests.test_object_tools_displayed_no_add_permission",
278-
"admin_views.tests.AdminViewBasicTest.test_change_list_sorting_override_model_admin",
279-
"admin_views.tests.AdminViewBasicTest.test_multiple_sort_same_field",
280-
"admin_views.tests.AdminViewListEditable.test_inheritance",
281-
"admin_views.tests.CSSTest.test_changelist_field_classes",
282-
"admin_views.tests.DateHierarchyTests",
283-
"aggregation.tests.AggregateTestCase.test_dates_with_aggregation",
284-
"annotations.tests.AliasTests.test_dates_alias",
285-
"aggregation_regress.tests.AggregationTests.test_more_more_more2",
286-
"backends.tests.DateQuotingTest.test_django_date_trunc",
287-
"dates.tests.DatesTests.test_dates_trunc_datetime_fields",
288-
"dates.tests.DatesTests.test_related_model_traverse",
289-
"generic_views.test_dates.ArchiveIndexViewTests.test_allow_empty_archive_view",
290-
"generic_views.test_dates.ArchiveIndexViewTests.test_archive_view",
291-
"generic_views.test_dates.ArchiveIndexViewTests.test_archive_view_by_month",
292-
"generic_views.test_dates.ArchiveIndexViewTests.test_archive_view_context_object_name",
293-
"generic_views.test_dates.ArchiveIndexViewTests.test_archive_view_custom_sorting",
294-
"generic_views.test_dates.ArchiveIndexViewTests.test_archive_view_custom_sorting_dec",
295-
"generic_views.test_dates.ArchiveIndexViewTests.test_archive_view_template",
296-
"generic_views.test_dates.ArchiveIndexViewTests.test_archive_view_template_suffix",
297-
"generic_views.test_dates.ArchiveIndexViewTests.test_date_list_order",
298-
"generic_views.test_dates.ArchiveIndexViewTests.test_no_duplicate_query",
299-
"generic_views.test_dates.ArchiveIndexViewTests.test_paginated_archive_view",
300-
"generic_views.test_dates.ArchiveIndexViewTests.test_paginated_archive_view_does_not_load_entire_table",
301-
"generic_views.test_dates.MonthArchiveViewTests.test_custom_month_format",
302-
"generic_views.test_dates.MonthArchiveViewTests.test_date_list_order",
303-
"generic_views.test_dates.MonthArchiveViewTests.test_month_view",
304-
"generic_views.test_dates.MonthArchiveViewTests.test_month_view_allow_empty",
305-
"generic_views.test_dates.MonthArchiveViewTests.test_month_view_allow_future",
306-
"generic_views.test_dates.MonthArchiveViewTests.test_month_view_get_month_from_request",
307-
"generic_views.test_dates.MonthArchiveViewTests.test_month_view_paginated",
308-
"generic_views.test_dates.MonthArchiveViewTests.test_previous_month_without_content",
309-
"generic_views.test_dates.YearArchiveViewTests.test_date_list_order",
310-
"generic_views.test_dates.YearArchiveViewTests.test_get_context_data_receives_extra_context",
311-
"generic_views.test_dates.YearArchiveViewTests.test_no_duplicate_query",
312-
"generic_views.test_dates.YearArchiveViewTests.test_year_view",
313-
"generic_views.test_dates.YearArchiveViewTests.test_year_view_allow_future",
314-
"generic_views.test_dates.YearArchiveViewTests.test_year_view_custom_sort_order",
315-
"generic_views.test_dates.YearArchiveViewTests.test_year_view_empty",
316-
"generic_views.test_dates.YearArchiveViewTests.test_year_view_make_object_list",
317-
"generic_views.test_dates.YearArchiveViewTests.test_year_view_paginated",
318-
"generic_views.test_dates.YearArchiveViewTests.test_year_view_two_custom_sort_orders",
319-
"many_to_one.tests.ManyToOneTests.test_select_related",
320-
"model_regress.tests.ModelTests.test_date_filter_null",
321-
"reserved_names.tests.ReservedNameTests.test_dates",
322-
"queryset_pickle.tests.PickleabilityTestCase.test_specialized_queryset",
323-
},
324-
"QuerySet.datetimes() is not supported on MongoDB.": {
325-
"admin_views.test_templatetags.DateHierarchyTests",
326-
"admin_views.test_templatetags.AdminTemplateTagsTest.test_override_change_list_template_tags",
327-
"admin_views.tests.AdminViewBasicTest.test_date_hierarchy_empty_queryset",
328-
"admin_views.tests.AdminViewBasicTest.test_date_hierarchy_local_date_differ_from_utc",
329-
"admin_views.tests.AdminViewBasicTest.test_date_hierarchy_timezone_dst",
330-
"annotations.tests.AliasTests.test_datetimes_alias",
331-
"datetimes.tests.DateTimesTests.test_21432",
332-
"datetimes.tests.DateTimesTests.test_datetimes_has_lazy_iterator",
333-
"datetimes.tests.DateTimesTests.test_datetimes_returns_available_dates_for_given_scope_and_given_field",
334-
"datetimes.tests.DateTimesTests.test_related_model_traverse",
335-
"generic_views.test_dates.ArchiveIndexViewTests.test_aware_datetime_archive_view",
336-
"generic_views.test_dates.ArchiveIndexViewTests.test_datetime_archive_view",
337-
"generic_views.test_dates.MonthArchiveViewTests.test_aware_datetime_month_view",
338-
"generic_views.test_dates.MonthArchiveViewTests.test_datetime_month_view",
339-
"generic_views.test_dates.YearArchiveViewTests.test_aware_datetime_year_view",
340-
"generic_views.test_dates.YearArchiveViewTests.test_datetime_year_view",
341-
"model_inheritance_regress.tests.ModelInheritanceTest.test_issue_7105",
342-
"queries.tests.Queries1Tests.test_ticket7155",
343-
"queries.tests.Queries1Tests.test_ticket7791",
344-
"queries.tests.Queries1Tests.test_tickets_6180_6203",
345-
"queries.tests.Queries1Tests.test_tickets_7087_12242",
346-
"timezones.tests.LegacyDatabaseTests.test_query_datetimes",
347-
"timezones.tests.NewDatabaseTests.test_query_datetimes",
348-
"timezones.tests.NewDatabaseTests.test_query_datetimes_in_other_timezone",
349-
},
350277
"QuerySet.extra() is not supported.": {
351278
"aggregation.tests.AggregateTestCase.test_exists_extra_where_with_aggregate",
352279
"annotations.tests.NonAggregateAnnotationTestCase.test_column_field_ordering",
@@ -366,6 +293,7 @@ def django_test_expected_failures(self):
366293
"queries.test_qs_combinators.QuerySetSetOperationTests.test_union_with_extra_and_values_list",
367294
"queries.tests.EscapingTests.test_ticket_7302",
368295
"queries.tests.Queries1Tests.test_tickets_1878_2939",
296+
"queries.tests.Queries1Tests.test_tickets_7087_12242",
369297
"queries.tests.Queries5Tests.test_extra_select_literal_percent_s",
370298
"queries.tests.Queries5Tests.test_ticket7256",
371299
"queries.tests.ValuesQuerysetTests.test_extra_multiple_select_params_values_order_by",

docs/source/ref/models/querysets.rst

-2
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,6 @@ All of Django's :doc:`QuerySet methods <django:ref/models/querysets>` are
99
supported, except:
1010

1111
- :meth:`bulk_update() <django.db.models.query.QuerySet.bulk_update>`
12-
- :meth:`dates() <django.db.models.query.QuerySet.dates>`
13-
- :meth:`datetimes() <django.db.models.query.QuerySet.datetimes>`
1412
- :meth:`extra() <django.db.models.query.QuerySet.extra>`
1513
- :meth:`prefetch_related() <django.db.models.query.QuerySet.prefetch_related>`
1614

docs/source/topics/known-issues.rst

+3-2
Original file line numberDiff line numberDiff line change
@@ -31,11 +31,12 @@ Querying
3131
- The following ``QuerySet`` methods aren't supported:
3232

3333
- :meth:`bulk_update() <django.db.models.query.QuerySet.bulk_update>`
34-
- :meth:`dates() <django.db.models.query.QuerySet.dates>`
35-
- :meth:`datetimes() <django.db.models.query.QuerySet.datetimes>`
3634
- :meth:`extra() <django.db.models.query.QuerySet.extra>`
3735
- :meth:`prefetch_related() <django.db.models.query.QuerySet.prefetch_related>`
3836

37+
- :meth:`QuerySet.datetimes() <django.db.models.query.QuerySet.datetimes>` may
38+
generate incorrect results. XXX TODO XXX
39+
3940
- :meth:`QuerySet.delete() <django.db.models.query.QuerySet.delete>` and
4041
:meth:`update() <django.db.models.query.QuerySet.update>` do not support queries
4142
that span multiple collections.

0 commit comments

Comments
 (0)