№1 Практическая онлайн-школа обучения языкам программирования Python (Django), JavaScript, Kotlin В. Бовсуновского.

Специальная, подарочная акция получения доступа к Django4!

Как, я, начал код писать в Python? Смотрите, если уперлись и ничего не получается.

26. Сложные многоступенчатые запросы к базе делаем просто.

научимся делать более сложные запросы. Это нам даст уверенность, что написать сайт мы можем любой сложности.

-

ex0 = Sites.objects.exclude(date_added__gt=datetime.date(2021, 11, 16)).exclude(name__icontains ='vk')

ex0

<QuerySet [<Sites: Ютуб>, <Sites: Школа Бовсуновского>, <Sites: Редакторы кода.>, <Sites: Машинное обучение.>, <Sites: site2>, <Sites: site1>, <Sites: site 3>, <Sites: site>, <Sites: Markdown>]>

ex1 = Sites.objects.exclude(date_added__gt=datetime.date(2021, 11, 16)).filter(name__startswith = 's').exclude(name__icontains ='vk')

ex1

<QuerySet [<Sites: site2>, <Sites: site1>, <Sites: site 3>, <Sites: site>]>

ex2 = Sites.objects.exclude(date_added__gt=datetime.date(2021, 11, 16)).filter(name__startswith = 'Ш')

ex2

<QuerySet [<Sites: Школа Бовсуновского>]>

Перейти к уроку

27. Django 4. Переопределение get_queryset и queryset, посмотрим исходный код.

Разберём исходный код, что бы понять как работать с API моделей, ведь там все написано.

-

#Исходный код.

def get_queryset(self):
        """
        Return the list of items for this view.
        The return value must be an iterable and may be an instance of
        `QuerySet` in which case `QuerySet` specific behavior will be enabled.
        """
        if self.queryset is not None:
            queryset = self.queryset
            if isinstance(queryset, QuerySet):
                queryset = queryset.all()
        elif self.model is not None:
            queryset = self.model._default_manager.all()
        else:
            raise ImproperlyConfigured(
                "%(cls)s is missing a QuerySet. Define "
                "%(cls)s.model, %(cls)s.queryset, or override "
                "%(cls)s.get_queryset()." % {
                    'cls': self.__class__.__name__
                }
            )
        ordering = self.get_ordering()
        if ordering:
            if isinstance(ordering, str):
                ordering = (ordering,)
            queryset = queryset.order_by(*ordering)

        return queryset

Перейти к уроку

28. Что бы полностью понять исходный код, нам нужно понимать isinstance().

Я подумал, что могут быть нюансы и не все сильны в ООП, давайте в jupyter напишем и переосмыслим метод isinstance().

Перейти к уроку

29. Переопределим get_queryset() и поймем тонкости.

Исходя из проделанной ранее качественной работы по понимаю исходного кода, мы можем применить get_queryset() профессионально и понять все возможности.

мы уже сделали вывод и исходя из исходного кода набросали план:

  • queryset может применяться сам по себе.
  • get_queryset() переопредлить
  • queryset + get_queryset()

Теперь давайте пропишем и проверим.

Перейти к уроку