From 302d0e50680cb16f06486521af6557e3f075f01a Mon Sep 17 00:00:00 2001 From: collerek Date: Tue, 6 Jul 2021 15:20:58 +0200 Subject: [PATCH] refactor to method --- ormar/queryset/actions/filter_action.py | 31 ++++++++++++++----------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/ormar/queryset/actions/filter_action.py b/ormar/queryset/actions/filter_action.py index c8d2f2f..21ba5c8 100644 --- a/ormar/queryset/actions/filter_action.py +++ b/ormar/queryset/actions/filter_action.py @@ -135,22 +135,10 @@ class FilterAction(QueryAction): :return: complied and escaped clause :rtype: sqlalchemy.sql.elements.TextClause """ - if isinstance(self.filter_value, ormar.Model): self.filter_value = self.filter_value.pk - if isinstance( - self.filter_value, (datetime.date, datetime.time, datetime.datetime) - ): - self.filter_value = self.filter_value.isoformat() - - if isinstance(self.filter_value, (list, tuple, set)): - self.filter_value = [ - x.isoformat() - if isinstance(x, (datetime.date, datetime.time, datetime.datetime)) - else x - for x in self.filter_value - ] + self._convert_dates_if_required() op_attr = FILTER_OPERATORS[self.operator] if self.operator == "isnull": @@ -164,6 +152,23 @@ class FilterAction(QueryAction): ) return clause + def _convert_dates_if_required(self) -> None: + """ + Converts dates, time and datetime to isoformat + """ + if isinstance( + self.filter_value, (datetime.date, datetime.time, datetime.datetime) + ): + self.filter_value = self.filter_value.isoformat() + + if isinstance(self.filter_value, (list, tuple, set)): + self.filter_value = [ + x.isoformat() + if isinstance(x, (datetime.date, datetime.time, datetime.datetime)) + else x + for x in self.filter_value + ] + def _compile_clause( self, clause: sqlalchemy.sql.expression.BinaryExpression, modifiers: Dict, ) -> sqlalchemy.sql.expression.TextClause: