Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 8, 2015 14:07:34

lEXA
От: Екатеринбург
Зарегистрирован: 2013-04-30
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Поиск в БД

Добрый день,
Изучаю Django - возникают вопросы)
Есть БД - скажем машины. Условный пример вот http://auto.ru/cars/chevrolet/aveo/used/
Делаю viewшки (проблем нет).
Но как выводить то что нужно пользователю (пользователь сам выбирает - скажем машины с 2001 по 2005 год, автомат, дизель).

Погуглил - примеров не нашел. В обучалках что смотрел-читал не видел такого.

Офлайн

#2 Янв. 8, 2015 16:11:52

ajib6ept
От: От: От: От: От: От: От: От:
Зарегистрирован: 2013-08-04
Сообщения: 297
Репутация: +  26  -
Профиль   Отправить e-mail  

Поиск в БД

http://auto.ru/cars/chevrolet/aveo/used/?search%5Bsection_id%5D=1&search%5Bmark%5D%5B0%5D=49&search%5Bmark-folder%5D%5B0%5D=49-4269&search%5Bprice%5D%5Bmin%5D=&search%5Bprice%5D%5Bmax%5D=&search%5Byear%5D%5Bmin%5D=2013&search%5Byear%5D%5Bmax%5D=2014&search%5Bseller%5D=0&search%5Bavailability%5D=&search%5Brun%5D%5Bmin%5D=&search%5Brun%5D%5Bmax%5D=&search%5Bstate%5D=1&search%5Bperiod%5D=0&search%5Bengine_volume%5D%5Bmin%5D=&search%5Bengine_volume%5D%5Bmax%5D=&search%5Bengine_power%5D%5Bmin%5D=&search%5Bengine_power%5D%5Bmax%5D=&search%5Bgeo_region%5D=&search%5Bgeo_city%5D=&search%5Bgeo_country%5D=&search%5Bgeo_similar_cities%5D=&search%5Bacceleration%5D%5Bmin%5D=&search%5Bacceleration%5D%5Bmax%5D=&search%5Bwheel%5D=&search%5Bowners_number%5D=&search%5Bcustom%5D=1&search%5Bexchange%5D=0&search%5Bsalon_id%5D=&search%5Bextras%5D%5B33%5D=&search%5Bextras%5D%5B23%5D=&search%5Bextras%5D%5B39%5D=&search%5Bextras%5D%5B43%5D=&search%5Bextras%5D%5B46%5D=&search%5Bextras%5D%5B300%5D=&search%5Bextras%5D%5B49%5D=&search%5Bseats%5D=&show_sales=1#sales-list

попробывал зафильтровать по дате. На сайте происходит фильтрация по get-Запросу. Т.е. надо получить содержимое get-запроса в соответствии с этим отфильтровать модель.



_________________________
Python golden rule: Do not PEP 8 unto others; only PEP 8 thy self.
Don't let PEP 8 make you insanely intolerant of other people's code.

Офлайн

#3 Янв. 8, 2015 16:47:08

lEXA
От: Екатеринбург
Зарегистрирован: 2013-04-30
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Поиск в БД

ajib6ept
попробывал зафильтровать по дате. На сайте происходит фильтрация по get-Запросу
Да интересует именно GET - что бы можно было прямую ссылку давать - вот авто с 2008 года
ajib6ept
Т.е. надо получить содержимое get-запроса в соответствии с этим отфильтровать модель.
Получаем список переменных из GET
Если есть год начала то не менее, если год до ..
составить QuerySet запрос пропарсив все переменные как то не хватает знаний(

Офлайн

#4 Янв. 8, 2015 17:17:11

lEXA
От: Екатеринбург
Зарегистрирован: 2013-04-30
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Поиск в БД

Тогда давайте спрошу более понятный вопрос
Три параметра скажем
year_before - год с какого ищем
year_last год до которого ищем
Все включительно
и automat - True or False

Передаем не все 3 всегда а выборочно. 1 параметр любой. 0 параметров. Все три.
Как составить QuerySet ? Ну кроме дикого if

Офлайн

#5 Янв. 8, 2015 17:49:23

GreyZmeem
От: Киев
Зарегистрирован: 2013-12-03
Сообщения: 147
Репутация: +  34  -
Профиль   Отправить e-mail  

Поиск в БД

Можно как-то так:

class SearchForm(forms.Form):
    formfield_to_dbfield = {
        'year_from': 'year__lte',
        'year_to': 'year__gte',
    }
 
    year_from = forms.DateField(required=False)
    year_to = forms.DateField(required=False)
    automat = forms.BooleanField(required=False)
 
    def get_dbfield(self, formfield):
        return self.formfield_to_dbfield.get(formfield, formfield)
 
    def search(self):
        search_dict = dict(
            (self.get_dbfield(formfield), value) 
            for formfield, value 
            in self.clean().iteritems() 
            if value is not None
        )
        return MyModel.objects.filter(**search_dict)

Офлайн

#6 Янв. 8, 2015 18:17:33

lEXA
От: Екатеринбург
Зарегистрирован: 2013-04-30
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Поиск в БД

GreyZmeem
Надо переспать с этим решением)
Спасибо!
Я наверное в самом начале.. пути)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version