Модель поиска Django по словарю (также включает диапазон) - PullRequest
0 голосов
/ 03 октября 2019

Здравствуйте, у меня возникли проблемы при попытке выяснить, как справиться с этой проблемой.

У меня есть такой запрос (ключ данных может быть любым, но значение имеет 3 типа строки, int или словарь со значениями min и max ):

{
   "city":5,
   "size":{
      "max":78693,
      "min":11202
   },
   "type":"rent",
   "ward":229,
   "price":{
      "max":43660474485,
      "min":7660026858
   },
   "street":1853,
   "district":20,
   "frontend":{
      "max":90,
      "min":18
   },
   "direction":"ne"
}

Сейчас я пытаюсь найти модельиспользуя фильтр, следуя значениям вышеупомянутого словаря, проблема в том, что я не знаю, как обращаться, если ключ имеет значения min и max , то я должен найти между его диапазономв фильтре.

Я знаю, что вы можете искать по диктовке с помощью следующего:

models.objects.filter(**my_dict)

Но как мне обрабатывать специальные условия, такие как min и max диапазон в фильтре?

Я хочу вывести вот так (имя поля следует за ключом словаря):

models.objects.filter(city=5, size__range(min, max), type="rent",... other keys and values)

Спасибо за чтение

1 Ответ

1 голос
/ 03 октября 2019

Самое простое, что приходит мне в голову, это изменить свой диктат, чтобы определить, какую модель django можно использовать:

query_dict = {}
for k, v in my_dict.items():
     if type(v) is dict:
        query_dict[f'{k}__range'] = (v['min'], v['max'])
     else:
        query_dict[k] = v

query_dict # {'city': 5, 'size__range': [11202, 78693], 'type': 'rent', 'ward': 229, 'price__range': [7660026858, 43660474485], 'street': 1853, 'district': 20, 'frontend__range': [18, 90], 'direction': 'ne'}

Хотя, возможно, есть более интересное решение

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...