From 36169a5d0708a79c23e1d1d999dca3c008855fc2 Mon Sep 17 00:00:00 2001 From: Jerome Lefeuvre Date: Wed, 15 Dec 2021 15:43:05 -0500 Subject: [PATCH] Fix #7 : Add possibility to filter on nested field more than 1 level --- daterangefilter/filters.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/daterangefilter/filters.py b/daterangefilter/filters.py index 634b837..5647d28 100644 --- a/daterangefilter/filters.py +++ b/daterangefilter/filters.py @@ -23,11 +23,13 @@ def __init__(self, field, request, params, model, model_admin, field_path): if self.lookup_gte and self.lookup_lte: self.lookup_val = '{} - {}'.format(self.lookup_gte, self.lookup_lte) # if we are filtering DateTimeField we should add one day to final date - if "__" in field_path: - related_model, field = field_path.split("__") - field = model._meta.get_field(related_model).related_model._meta.get_field(field) - else: - field = model._meta.get_field(field_path) + new_field_path = field_path + nested_model = model + while len(new_field_path.split('__')) > 1: + related_model, new_field_path = new_field_path.split("__")[0], '__'.join(new_field_path.split("__")[1:]) + nested_model = nested_model._meta.get_field(related_model).related_model + + field = nested_model._meta.get_field(new_field_path) if isinstance(field, models.DateTimeField) or isinstance(field, models.DateField): try: