Бекенд на Django, Урок 3: Filters, Search, Ordering

  Рет қаралды 29,021

Senior Pomidor Developer

Senior Pomidor Developer

Күн бұрын

00:00 про фильтры, поиск и сортировку
00:36 Filtering в Django REST Framework
02:08 установка django-filter
02:40 настройка фильтрации через API , filter_fields, DjangoFilterBackend
04:23 определение DEFAULT_RENDERER_CLASSES для json ответов
05:37 проверяем как работает фильтрация через запросы к API
06:56 создание тестовых данных через django shell
08:32 регистрируем модели в django admin , ModelAdmin
10:47 определяем _str_ через F-strings в python
11:49 Search в Django REST Framework
12:30 1) Provide a one-off default now ; 2) Quit, and let me add a default
15:13 настройка поиска через search_fields в API View , SearchFilter
18:33 Делаем запрос на поиск в API через браузер
19:11 Ordering в Django REST Framework, OrderingFilter, ordering_fields
21:50 Пишем юнит-тесты для фильтрации и поиска , APITestCase, setUp,
28:15 Задание для самостоятельной работы
28:37 Заключение

Пікірлер: 155
@sayhellotoroy
@sayhellotoroy Жыл бұрын
В новых версиях после фитрации называется filterset_fields = ['price'] class BookViewSet(ModelViewSet): queryset = Book.objects.all() serializer_class = BookSerializer filter_backends = [django_filters.rest_framework.DjangoFilterBackend] filterset_fields = ['price']
@cristianglodeanu2329
@cristianglodeanu2329 Жыл бұрын
спасибо
@Webian
@Webian Жыл бұрын
А ще треба реєструвати - INSTALLED_APPS = [ ... 'django_filters', ... ]
@U7116-k7d
@U7116-k7d Жыл бұрын
Дякую
@TimBul-jp2jp
@TimBul-jp2jp Жыл бұрын
Спасибо за замечание, долго ломал голову почему, оказывается и документацию на старую версию читал...
@workspace1540
@workspace1540 Жыл бұрын
Тоже попался и полдня убил) спасибо))
@user-kq3xg9rn4f
@user-kq3xg9rn4f 2 жыл бұрын
На нынешних версиях для работы фильтра во view нужно написать filterset_fields = ['price']. В уроке на более ранних версиях было filter_fields = ['price']. В drf docs это написано, но вдруг кому пригодится
@SeniorPomidorDeveloper
@SeniorPomidorDeveloper 2 жыл бұрын
Да, это проблема что библиотеки меняются, а видео уже не поправишь
@Mr_Green_N
@Mr_Green_N 2 жыл бұрын
Спасибо, человек!!! 20 минут искал ошибку, почему не работала фильтрация!
@user-kq3xg9rn4f
@user-kq3xg9rn4f 2 жыл бұрын
@@SeniorPomidorDeveloper Огромное спасибо за отличное видео! то, что из версии к версии что-то меняется - это нормально. Этот курс по беку просто бесценен.
@whythattt4076
@whythattt4076 Жыл бұрын
целую, котик
@user-oq3np1ud8q
@user-oq3np1ud8q 3 жыл бұрын
Спасибо за интересные уроки! Очень актуально и познавательно, особенно про тестирование! Хотелось бы побольше таких видео с новыми проектами!
@cronosnoname4038
@cronosnoname4038 3 жыл бұрын
Мужик, ты крут и очень хорошо объясняешь. Не забрасывай канал !
@supreltd
@supreltd Жыл бұрын
Спасибо! Ваше объяснение + чтение доков = понимание и работающий код.
@artem_garyanov
@artem_garyanov 2 жыл бұрын
Спасибо, что нашли время! Очень приятно Вас слушать
@kirillkruglov1418
@kirillkruglov1418 3 жыл бұрын
Крутейшие уроки! Лучшее объяснение по джанго в русском сегменте ютуба. Спасибо большое, автор !
@Channel25_25
@Channel25_25 2 жыл бұрын
Как же вы мне помогли, вы просто не представляете, огромное Вам спасибо!! продолжайте в том же духе
@user-sk9se5be9g
@user-sk9se5be9g 2 жыл бұрын
Спасибо автору, компетентный специалист. А объяснение просто на высоте!
@progmain5237
@progmain5237 2 жыл бұрын
Спасибо за уроки, хорошо объясняешь. Очень много новой инфы и это круто! Но нужно больше опыта, сложно запоиинать все и сразу)))
@tihon4979
@tihon4979 3 жыл бұрын
Спасибо, синьор помидор! ))) Ты лучший!!!
@uvajat
@uvajat 3 жыл бұрын
Спасибо! Очень крутой урок!
@user-bt8sy9jy4j
@user-bt8sy9jy4j 3 жыл бұрын
Спасибо, лучший канал!
@AlexeyShilyaev
@AlexeyShilyaev Жыл бұрын
Давно не было таких эмоций от изучения чего-то нового, как после этой лекции. После настройки поиска, когда выдало книгу Хемингуэя и книгу про него, испытал эстетическое удовольствие. Спасибо за проделанную работу, продолжайте в том же духе.
@SeniorPomidorDeveloper
@SeniorPomidorDeveloper Жыл бұрын
Вам спасибо что смотрите!
@ne.casimiro
@ne.casimiro 2 жыл бұрын
Спасибо Варламов, не знал что ты программист.
@Gribori
@Gribori 3 жыл бұрын
лайкнул, подписался и всё такое :D
@user-vz8wc9be7n
@user-vz8wc9be7n Жыл бұрын
Великолепно. Спасибо огромное
@workspace1540
@workspace1540 Жыл бұрын
Это просто пушка. Спасибо
@dodokwak
@dodokwak 3 жыл бұрын
отлично. ещё раз спасибо.
@user-ey7rd9ih4g
@user-ey7rd9ih4g Жыл бұрын
Супер, спасибо!
@ToxicBugsy
@ToxicBugsy 2 жыл бұрын
Учил пайтон, SQL и прочие штуки, за Джанго боялся браться и буксовал в учебе. Как же я был не прав когда откладывал твои ролики "на потом":( Ты лучший! Понял что Джанго это не так страшно. Более того, с джанго хочется возиться, это прекрасно)
@SeniorPomidorDeveloper
@SeniorPomidorDeveloper 2 жыл бұрын
Спасибо большое!
@dmitry_rt
@dmitry_rt 3 жыл бұрын
Класс, спасибо!
@andredru4278
@andredru4278 Жыл бұрын
Спасибо. Всё так просто выходит, ух.
@SeniorPomidorDeveloper
@SeniorPomidorDeveloper Жыл бұрын
👍
@scrypto
@scrypto Жыл бұрын
Спасибо, уже весь ваш канал пересмотрел, это последний плейлист (
@SeniorPomidorDeveloper
@SeniorPomidorDeveloper Жыл бұрын
скоро будет
@a98cb985
@a98cb985 Жыл бұрын
Очень спасибо!
@gameaction3611
@gameaction3611 3 жыл бұрын
Спасибо!
@jamjam3337
@jamjam3337 5 ай бұрын
спасибо!👍
@sainco3036
@sainco3036 3 жыл бұрын
Спасибо.
@dizzivoneverec2737
@dizzivoneverec2737 3 жыл бұрын
Пишу комментарий чтобы по быстрей вышли новые ролики))
@user-mo4jd9sq4h
@user-mo4jd9sq4h Жыл бұрын
Добрый вечер а можете показать как сделать профиль пользователя с формой обратной связи чтобы форма отравляла заявку на почту пользователя который зарегистрированный на сайте
@user-qp8hg4ds2b
@user-qp8hg4ds2b 2 жыл бұрын
Ребята, если у кого будут мучения с фильтрами, как у меня. Совет: устанавливайте ту же версию django-filter, что и в видео (2.3.0), а не 22.1(которая на сегодня последняя). А также, как и автор, установите формат вывода JSON (почему-то не работает при подключенной статике drf).
@eugenebybin6403
@eugenebybin6403 Жыл бұрын
Можно использовать и последнюю версию, просто необходимо добавить в приложения 'django_filters', а поле для указания полей фильтрации называется 'filterset_fields', а не 'filter_fields'. Все это есть в документации по ссылке из видео - Django REST Framework - Filtering
@pretcb
@pretcb Жыл бұрын
@@eugenebybin6403 Прочитал твой комментарий уже после всех вышеперечисленных манипуляций:)) как говорится все на своем опыте. Вначале думал, что мой пакет Django-filters встал криво...
@navin2739
@navin2739 3 жыл бұрын
если есть конечно время для ответа, то помоги, пожалуйста, а за видео спасибо.
@dodokwak
@dodokwak 3 жыл бұрын
а чем отличается способ admin.site.register(Book) от @admin.register(Book) ... class BookAdmin(ModelAdmin)? спасибо.
@SeniorPomidorDeveloper
@SeniorPomidorDeveloper 3 жыл бұрын
Не знаю... скорее всего ничем. Точнее втрой вариант позволяет как-то настраивать и расширять эту модель в админка. Первый вроде такого не может .
@dodokwak
@dodokwak 3 жыл бұрын
Поняла, что не особо задумывалась над разницей между filter and search, особенно с применении к конкретным данным. Предположим с моей модели есть поле категория с ForeignKey (Category). Тогда, учитывая особенности Фильтрации, наверное можно во viewset-e прописать просто filter_fields = ['category'] , а не ['category_name'],т.к. фронтенд может мне переслать id категории, которую выбрал юзер.
@SeniorPomidorDeveloper
@SeniorPomidorDeveloper 3 жыл бұрын
Да, все верно. Фильтр это по одному полю , а поиск по нескольким разным
@hellohomies12321
@hellohomies12321 Жыл бұрын
а сколько лет вы уже изучаете django? курс просто вау, все понятно, не думал что есть такие люди в ру сегменте 🤩
@SeniorPomidorDeveloper
@SeniorPomidorDeveloper Жыл бұрын
Лет восемь я на Джанго работаю. Спасибо за такой отзыв!
@qwerty-st9hh
@qwerty-st9hh 6 ай бұрын
Вопрос такой, если у меня в моделях есть поле с датой, то можна ли как-то скпинуть это поле, бо каждый раз менять дату в тестах не удобно?
@SeniorPomidorDeveloper
@SeniorPomidorDeveloper 6 ай бұрын
Да, проще всего будет ее заморозить , библиотекой freezegun , через декоратор @freeze_time("2012-01-14") Ну или через mock, написать mock.ANY вместо даты , где мы проверяем данные
@ibrahimoglu
@ibrahimoglu 2 жыл бұрын
👍
@user-nn1oc2br1o
@user-nn1oc2br1o 2 жыл бұрын
Привет, спасибо за крутые уроки, но может быть есть ссылка на гитхаб с кодом?
@SeniorPomidorDeveloper
@SeniorPomidorDeveloper 2 жыл бұрын
Вам спасибо! github.com/chepe4pi/books_lessons
@nikitaradionov4393
@nikitaradionov4393 3 жыл бұрын
Senior Pomidor Developer добрый день. Подскажите пожалуйста, как следует поступить в такой ситуации: У меня создана модель "Товар", в которой есть FK на другую модель. При сериализации "Товара" в поле, которое ссылается на другую модель, выводит id, а хотелось бы, чтобы выводило поле 'name'.
@nikitaradionov4393
@nikitaradionov4393 3 жыл бұрын
Нашёл решения. Их несколько. Наиболее правильным, как я считаю, является дополнительная сериализация вторичного ключа. Пример скидываю. class BrandsSerializers(ModelSerializer): class Meta: model = Brand fields = ['name'] class SmartPhonesSerializer(ModelSerializer): brand = BrandsSerializers(read_only=True) class Meta: model = SmartPhone fields = ['id', 'brand', 'name'] +++++++++++++++++++++++++++++++++++++++++ На выходе получаем : [ {"id":1,"brand":{"name":"Apple"},"name":"Apple Iphone 8 Plus"}, {"id":2,"brand":{"name":"Xiaomi"},"name":"Xiaomi A6"}, {"id":3,"brand":{"name":"Samsung"},"name":"Samsung galaxy A5"} ]
@SeniorPomidorDeveloper
@SeniorPomidorDeveloper 3 жыл бұрын
Да, выглядит правильно .
@nikitaradionov4393
@nikitaradionov4393 3 жыл бұрын
@@SeniorPomidorDeveloper спасибо за обратную связь. Материал, который вы выдаёте просто пушка! Спасибо вам!
@SeniorPomidorDeveloper
@SeniorPomidorDeveloper 3 жыл бұрын
Вам спасибо!
@user-mk5dm5gb5x
@user-mk5dm5gb5x 2 жыл бұрын
@@nikitaradionov4393 твой вариант немного неправильный. Да, ты получишь верный результат, однако такой подход неоптимизированный. У тебя вместо одного запроса будет целая серия из-за того, что ты используешь дополнительную сериализацию.В таком случае нужно обьединять таблицы и назначать ОДИН сериализатор
@rsyuzyov
@rsyuzyov 2 жыл бұрын
На 11:50 мы сделали вывод в админке id и названия для Book, но получилось не совсем красиво - просто строка с id и name. А как сделать, чтобы вывод был в виде таблицы из трех колонок: id, name и price? Или это где-то дальше будет?
@SeniorPomidorDeveloper
@SeniorPomidorDeveloper 2 жыл бұрын
Не очень понял что на 11:50. Вообще это курс чисто про API, про отображение тут ничего не будет, мы это все оставляем воображаемому фронтендеру .
@shaxdjuraev
@shaxdjuraev Жыл бұрын
Ещё можно фильтровать (по категориям там и т.д.) list_filter=('category') только сначала нужно создать модель категории=)) и классная штука в админке save_on_top=True
@shaxdjuraev
@shaxdjuraev Жыл бұрын
В классе BookAdmin(): list_display=('id', 'name', 'price') list_display_links=('id', 'name')
@antonsachuk615
@antonsachuk615 3 жыл бұрын
response = self.client.get(url, data={'ordering': 'price'}) Подскажи пожалуйста - мы ставили в браузерной строке - перед прайсом, чтобы отсортировалось по убыванию. А как сделать это в тестах? ставлю 'ordering': '-price' и 'ordering': -'price' выдаёт ошибку
@SeniorPomidorDeveloper
@SeniorPomidorDeveloper 3 жыл бұрын
Знак минус конечно должен быть внутри кавычек. По ошибке не знаю что подсказать, смотря какая там ошибка , они очень разные бывают
@maesthrow
@maesthrow Жыл бұрын
просто одновременно с этим нужно поменять порядок ожидаемых значений в serializer_data на противоположный, т.к. результат будет так же перевернут "по убыванию"
@ivankrig7285
@ivankrig7285 3 жыл бұрын
Добрый день. Можно задать вопрос? Почем при использовании filters.SearchFilter и DjangoFilterBackend строки запросе не конкатенируются, а заменяют друг друга. Если использовать поиск то "?search=hdd", а потом использовать фильтр "?min_price=230&max_price=650" то строка запроса фильтров заменяет строку поиска, то есть результат поиска теряется и не фильтруется. Конечно, если руками вписать "?search=hdd&min_price=230&max_price=650", то получаем ожидаемый результат. Как это можно поправить, или оставить так и пусть на клиенте собирает строку запроса как угодно?
@SeniorPomidorDeveloper
@SeniorPomidorDeveloper 3 жыл бұрын
Добрый день! Да, конечно клиент должен сам собирать эти параметры в урле, так как ему хочется. Но я не понял в чем проблема собрать такую-же строку в тестах или в браузере или где-то еще..
@ivankrig7285
@ivankrig7285 3 жыл бұрын
@@SeniorPomidorDeveloper да нет. Проблемы нет. Мне показалось подобное поведение ошибкой, вот и спросил. Спасибо большое за ответ.
@jimlabable
@jimlabable 2 жыл бұрын
Я сделал проверку сортировки по полю price, но есть одна проблемка и не знаю как ее решить. Дело в том, что если набор цен (23,45,4) то сортировка будет неверной, потому что функция фильтрует строки. Есть ли возможность фильтровать числа в response? Код такой: def test_get_filter(self): response = self.client.get(self.url, data={'ordering': 'price'}) serializer_data = BooksSerializer([self.book_3, self.book_2, self.book_1], many=True).data serializer_data = sorted(serializer_data, key=lambda x: x['price']) self.assertEqual(serializer_data, response.data)
@SeniorPomidorDeveloper
@SeniorPomidorDeveloper 2 жыл бұрын
Честно говоря, сейчас нет возможности разбираться с вашим кодом. Может кто из подписчиков поможет …
@jimlabable
@jimlabable 2 жыл бұрын
@@SeniorPomidorDeveloper Спасибо за ответ! Ошибся в принтах, это моя функция сортировала строки (serializer_data) Это легко поправимо. serializer_data = sorted(serializer_data, key=lambda x: float(x['price']))
@user-gm2go5fe1g
@user-gm2go5fe1g 3 жыл бұрын
вопрос немного не по теме видео, но при изменении css файла django не отображает эти изменения на сайте, что делать?
@SeniorPomidorDeveloper
@SeniorPomidorDeveloper 3 жыл бұрын
Пересобрать через команду collectstatic? Не очень знаю, на самом деле
@dodokwak
@dodokwak 3 жыл бұрын
попробуйте в браузере работать инкогнито, у него кэш очищается.
@dmytrokovalov2199
@dmytrokovalov2199 3 жыл бұрын
Когда сделал изменения в CSS и идешь в браузер смотреть результат, то для обновления страницы используй Ctrl + F5. Это Hard Refresh. Чистит кеш страницы.
@bonifaciy7100
@bonifaciy7100 3 жыл бұрын
Всем привет! Как отфильтровать данные??? использую django-filters Нужно: получение списка справочников, актуальных на указанную дату. Например: есть справочники 1.05.21 10.05.21 20.05.21 Как сделать что бы вводилась дата и выводились справочники созданные ранее этой даты??
@SeniorPomidorDeveloper
@SeniorPomidorDeveloper 3 жыл бұрын
Надо что-то такое django-filter.readthedocs.io/en/stable/ref/filters.html#isodatetimefilter create_date = IsoDateTimeFilter(field_name='created', lookup_expr='lte')
@bonifaciy7100
@bonifaciy7100 3 жыл бұрын
​@@SeniorPomidorDeveloper Спасибо!
@devZu9
@devZu9 2 жыл бұрын
Очень классные уроки. Всё понятно, но есть незакрытые моменты. Вот как искать допустим по полю цены от 500 до 700 ? Ну это же постоянно встречается в фильтрах и такой популярный кейс совершенно не рассмотрен.
@SeniorPomidorDeveloper
@SeniorPomidorDeveloper 2 жыл бұрын
Это вам домашнее задание
@user-vd8pz6yk3p
@user-vd8pz6yk3p 3 жыл бұрын
Вопрос? Делаю поиск с помощью кириллицы. И регистронезависимость не работает! ( По умолчанию стоит регистронезависимый поиск! Но он тока работает для латиницы. То есть он различает букву "п" и букву "П" а хотелось бы что бы не различал. Подскажите как сделать?
@SeniorPomidorDeveloper
@SeniorPomidorDeveloper 3 жыл бұрын
Честно говоря , не знаю , надо гуглить типа «case insensitive search utf-8”
@user-vd8pz6yk3p
@user-vd8pz6yk3p 3 жыл бұрын
@@SeniorPomidorDeveloper ага чот перерыл все не могу найти. Ну это из-за того что в url буквы преобразуются типа в такие %D0%9F . Ок ну спасибо) если появится ответ - пиши. А я буду дальше гуглить!
@felixfreedman
@felixfreedman 3 жыл бұрын
@@user-vd8pz6yk3p вы нашли ответ?
@ruslanizz
@ruslanizz 3 жыл бұрын
Что считается правильным - сортировать и фильтровать на стороне сервера (силами Джанго), или во фронтенде (JS, vue.js)? Объём БД не очень большой, 5 тысяч объектов. Такое ощущение что на стороне клиента будет быстрее, не нужно обращаться к БД.
@SeniorPomidorDeveloper
@SeniorPomidorDeveloper 3 жыл бұрын
Только на сервере . База данных всегда имеет свойство расти . И не нужно будет нагружать сеть лишними данными
@bonifaciy7100
@bonifaciy7100 3 жыл бұрын
Всем привет! Написал фильтр class CreatedDateFilter(filters.FilterSet): created_date_lte = django_filters.DateTimeFilter(field_name="created_date", lookup_expr='lte') class Meta: model = Catalog fields = ['id', 'name', 'version', 'short_name', 'description', 'created_date'] почему при выводе запроса /?created_date_lte=2021-07-06/ в браузере выводиться: {"created_date_lte":["Введите правильную дату и время."]}
@SeniorPomidorDeveloper
@SeniorPomidorDeveloper 3 жыл бұрын
Похоже что формат даты должен быть другой , возможно со временем тоже, так как это DateTime
@montecristo31
@montecristo31 Жыл бұрын
у вас есть телеграм беседа?
@SeniorPomidorDeveloper
@SeniorPomidorDeveloper Жыл бұрын
Есть группа , ссылка в шапке профиля
@vasyapupkin007
@vasyapupkin007 3 жыл бұрын
Это всё хорошо и познавательно. Но как быть в случае если надо разработать API, который должен выдавать данные из некой legacy database, в которой нет primary/foreign keys от слова совсем? Как я понял, django ORM не позволит даже raw-sql выполнить. Или я неправ? У меня не получилось. Более-менее это удалось с применением sqlalchemy и Flask.
@SeniorPomidorDeveloper
@SeniorPomidorDeveloper 3 жыл бұрын
Ну для того чтобы делать raw-sql не нужен ORM, он нужен как раз чтобы их не делать. Если у вас серьезное веб-приложение, то я бы рекомендовал промигрировать базу в какой-то нормальный вид, а потом спокойно использовать ORM, такой какой нравится .
@vasyapupkin007
@vasyapupkin007 3 жыл бұрын
@@SeniorPomidorDeveloper Об этом я в курсе. Мигрировать или менять бд возможности нет. Если не нужен django ORM, то зачем нужен django? :) Выводить json через DRF? Но это можно сделать и без django.
@SeniorPomidorDeveloper
@SeniorPomidorDeveloper 3 жыл бұрын
Все можно сделать без всего. Вопрос удобства и скорости разработки стандартного функционала.
@vasyapupkin007
@vasyapupkin007 3 жыл бұрын
@@SeniorPomidorDeveloper Согласен. Но вопрос был не об этом :) Вопрос был такой: правильно ли я понял, что при использовании django ORM не получится использовать legacy database, в которой нет prinary/foreign keys, а возможности что-то изменить в бд нет? Ранее я разрабатывал API на Flask и sqlachemy, решил в этот раз попробовать Django DRF. И в итоге не удалось реализовать задачу. Гугление вокруг этой темы пока ничего не дало. Думаю вернуться к варианту на Flask. И второй вопрос: Не планируете сделать аналогичный мини-курс по Flask ? Спасибо.
@SeniorPomidorDeveloper
@SeniorPomidorDeveloper 3 жыл бұрын
Не могу ответить на вопрос , может и получится с этой базой , тут от базы зависит, надо пробовать. Гугл тут не поможет , в любом случае это какие-то хаки и «танцы с бубном» придётся исполнять. По фласку курс не планирую делать , там и функционала то мало у него.
@yawneed
@yawneed 3 жыл бұрын
Например сортировка по имени автора.( book 1 = author 1, book 2 =author 5, book 3 = author 2) def test_get_ordering(self): url = reverse('book-list') response = self.client.get(url, data={'ordering': 'author_name'}) serializer_data = BooksSerializer([self.book_1, self.book_3, self.book_2], many=True).data self.assertEqual(status.HTTP_200_OK, response.status_code) self.assertEqual(serializer_data, response.data)
@SeniorPomidorDeveloper
@SeniorPomidorDeveloper 3 жыл бұрын
Супер !
@yawneed
@yawneed 3 жыл бұрын
@@SeniorPomidorDeveloper А скажите пожалуйста, вы работаете на должности senior python bakckend developer?)
@SeniorPomidorDeveloper
@SeniorPomidorDeveloper 3 жыл бұрын
Да. )
@yawneed
@yawneed 3 жыл бұрын
@@SeniorPomidorDeveloper а сколько лет в разработке?
@SeniorPomidorDeveloper
@SeniorPomidorDeveloper 3 жыл бұрын
Работаю программистом лет уже 5, начал программировать лет 10 назад.
@user-li9zv8jf9d
@user-li9zv8jf9d 3 жыл бұрын
Присоэдиняюсь к восторженым зрителям. Урок очень класный. Уменя эсть вопрос , не буду долго росказывать что я только росбираюсь в джанго , может мой вопрос будет и очень простой. На 3.44 мин вы написали filter_backends = [DjangoFilterBackend] filter_fields = [‘praice ’] . Для меня несовсем понятен синтаксис. 1. Почиму вы не записали таким способом как в документации по джангонапример Entry.objects.filter(pub_date__year=2006). 2 [DjangoFilterBackend] что означаэт эта часть ? Что работает какойто фильтр а потом что он отфильтровал отправляет в список. И также [‘praice ’]. Это как переменная список куда отправляютса данные отфильтьтрованого списка только както подругому. Я раньше создавал переменную = список, а потом этот список фильтровал а тут акто непонятно. 3Где можна прочитать об этом. 4 ПРОСЬБА когда эсть такие моменты как filter_backends = [DjangoFilterBackend] filter_fields = [‘praice ’] вы о каждой части отдельно расесняйте: это то, от того, для того, потому. Для вас это банальные и монятные вещи а многим интересно и непонятно.
@SeniorPomidorDeveloper
@SeniorPomidorDeveloper 3 жыл бұрын
1. Я записал таким способом , по тому что этот способ максимально гибкий. Через Entity.objects.filter() было бы очень сложно и не удобно настраивать свои фильтры. 2. В filter_backends определяются классы, которые позволяют фильтровать queryset у этого view. В filter_fields определяются поля, по которым мы создаём возможность фильтровать при помощи DjangoFilterBackend. 3. Почитать об этом можно в документации DRF, я ее открывал в этом видео. Можно использовать авто-переводчик страницы на русский. 4. Я стараюсь объяснять подробно, насколько, насколько это возможно в рамках этого видео, сохраняя темп курса. Если рассказывать про устройство каждого класса то урок длился бы два часа , не думаю что это кому-то понравится , там мы написали всего две строчки .
@user-li9zv8jf9d
@user-li9zv8jf9d 3 жыл бұрын
@@SeniorPomidorDeveloper Спасибо за ответ. Буду вникать
@RuchejAlex
@RuchejAlex 2 жыл бұрын
как отфильтровать по месяцу и году игнорируя день?
@SeniorPomidorDeveloper
@SeniorPomidorDeveloper 2 жыл бұрын
Типа двойной фильтр . gte=01-08-2021 , lt=01-09-2021
@RuchejAlex
@RuchejAlex 2 жыл бұрын
@@SeniorPomidorDeveloper у вьюшки api прописано поле для фильтра дата. Как указать в параметрах урла фильтр по году и месяцу? это в связки DRF
@SeniorPomidorDeveloper
@SeniorPomidorDeveloper 2 жыл бұрын
Думаю что так не получится
@user-rx7pq3sp4t
@user-rx7pq3sp4t 10 ай бұрын
я еще обратил внимание, что Сеньор вроде как не добавлял в INSTALLED_APPS строку с 'django-filters', как написано в доке, но при этом у него работало)
@SeniorPomidorDeveloper
@SeniorPomidorDeveloper 10 ай бұрын
Ой
@user-rx7pq3sp4t
@user-rx7pq3sp4t 10 ай бұрын
@@SeniorPomidorDeveloper А можешь сказать почему все равно работает?)
@Name-ko3qb
@Name-ko3qb Жыл бұрын
А почему мы не проверяем книги из БД, а лишь созданные внутри теста?
@SeniorPomidorDeveloper
@SeniorPomidorDeveloper Жыл бұрын
В тесте проверяется то, что там создается . Так это работает, так задумано
@Name-ko3qb
@Name-ko3qb Жыл бұрын
@@SeniorPomidorDeveloper Спасибо что отвечаешь)
@Name-ko3qb
@Name-ko3qb Жыл бұрын
@@nicholasspezza9449 А вот грубить мне не стоило бы, если только вам нарвится выглядить идиотом.
@Name-ko3qb
@Name-ko3qb Жыл бұрын
Для чего нужны поиск и сортировка в ресте?
@SeniorPomidorDeveloper
@SeniorPomidorDeveloper Жыл бұрын
Чтобы искать и сортировать) На сайте , к примеру. Рест это то, что стоит за визуальной оболочкой сайта.
@Name-ko3qb
@Name-ko3qb Жыл бұрын
@@SeniorPomidorDeveloper Спсибо бро, так и подумал)
@SeniorPomidorDeveloper
@SeniorPomidorDeveloper Жыл бұрын
😁
@bandirom
@bandirom 3 жыл бұрын
Интересно объясняешь, мне нравится, но я не пойму зачем останавливать сервер, чтобы зайти в shell? Можно же создать ещё одну вкладку консоли) и git bash была б лучше вместо обычной в пай чарме)
@SeniorPomidorDeveloper
@SeniorPomidorDeveloper 3 жыл бұрын
Да, что-то не думал об этом . Я обычно инструментами пользуюсь только встроенными в PyCharm PE, но так как здесь вынужден использовать бесплатную версию , то работаю немного непривычно для себя , по этому получается иногда не оптимально..
@devopsliveuz
@devopsliveuz 2 жыл бұрын
исходники?
@SeniorPomidorDeveloper
@SeniorPomidorDeveloper 2 жыл бұрын
Да были где-то...
@SeniorPomidorDeveloper
@SeniorPomidorDeveloper 2 жыл бұрын
Вроде это github.com/chepe4pi/books_lessons Ветки по дням
@user-jd4rl7im6d
@user-jd4rl7im6d 2 жыл бұрын
но ведь есть же принцип, что нужно тестировать только свой код, зачем же писать тесты на фильтры, поиск и сортировку DRF? мы все равно под капот этих классов не залазим
@SeniorPomidorDeveloper
@SeniorPomidorDeveloper 2 жыл бұрын
Вообще не обязательно, но это неплохо, проверить через тест наличие фильтра в нашем viewset. Хотя-бы чтобы научится тесты писать. Когда будем делать кастумные фильтры чтобы уже был нормальный инструмент для тестирования и его понимание.
@navin2739
@navin2739 3 жыл бұрын
что использовать для работы с координатами ? есть тестовое задание и я его завалил, но для меня вопрос остается открытым. нужно было создать компонент, который бы позволил получал адрес доставки и возвращал данные зоны доставки и курьера, который привязан к этой зоне. Сложность заключалась в том, что я вообще понятия не имею как организовать сохранения координат самой зоны доставки так, чтобы при получении адреса доставки происходила проверка на принадлежность данной точки (адреса доставки) к зоне доставки. Зона должна сохраняться в виде набора координат
@SeniorPomidorDeveloper
@SeniorPomidorDeveloper 3 жыл бұрын
Сложное задание. Тут нужно скорее всего использовать PostGIS и искать примеры как на нем такие штуки делаются..
@navin2739
@navin2739 3 жыл бұрын
@@SeniorPomidorDeveloper спасибо тебе!)
@aleksei_bauman
@aleksei_bauman 5 ай бұрын
сражался с тестами для сортировки, в итоге вышло так: def test_ordering(self): """Проверка сортировки""" url = reverse('book-list') response = self.client.get(url, data={'ordering': '-title'}) serializer_data = BookSerializer([self.book3, self.book2, self.book1], many=True) serializer_data_sort = sorted(serializer_data.to_representation(serializer_data.data), key=itemgetter('title')) self.assertEqual(serializer_data_sort, response.data) self.assertEqual(response.status_code, status.HTTP_200_OK)
@SeniorPomidorDeveloper
@SeniorPomidorDeveloper 5 ай бұрын
Хм. Да , вполне хороший вариант. Вообще с тестами обычно не сильно заморачиваться и тупо копируют сами данные в тест, уже отсериализованные. Тесты не обязаны быть каким-то емкими или гибкими , в отличие от кода
Бекенд на Django, Урок 4: OAuth
29:54
Senior Pomidor Developer
Рет қаралды 22 М.
DRF API фильтры и поиск в блоге - django filter, search
9:38
Django School | Омельченко Михаил
Рет қаралды 6 М.
ПРОВЕРИЛ АРБУЗЫ #shorts
00:34
Паша Осадчий
Рет қаралды 6 МЛН
WHAT’S THAT?
00:27
Natan por Aí
Рет қаралды 13 МЛН
Who has won ?? 😀 #shortvideo #lizzyisaeva
00:24
Lizzy Isaeva
Рет қаралды 64 МЛН
Обо мне
9:08
Senior Pomidor Developer
Рет қаралды 9 М.
ВЕСЬ FASTAPI ЗА 30 МИН
28:37
ПИТОНИСТЫ | КИРИЛЛ ПОЗДНЯКОВ
Рет қаралды 29 М.
ПРОВЕРИЛ АРБУЗЫ #shorts
00:34
Паша Осадчий
Рет қаралды 6 МЛН