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

Смотреть видео о системе и почему не получается писать код у ребят и девчат.

24. Давайте уясним по id, он всегда есть в базе и посмотрим get запросы.

Я прошу вас запомнить раз и навсегда. что id всегда есть, то есть каждая запись в базе всегда имеет номер.

Давайте увидим это и научимся использовать. Нужно будет при выборке объектов конкретной записи и особенно в функциях, в классах мы с вами встречались при выборке url.

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

25. Выборка с разных моделей по ForeignKey().

Научимчя работать с отношениями многие к одному.

ForeignKey

-

# Entry.objects.order_by('blog__name', 'headline')

fk = Notes.objects.order_by("sites__name", "title")
# Note по полю sites = models.ForeignKey('info_notes.Sites',......
# Sites по полю name = models.CharField(max_length=80,....
# Note Что выбрать, выбрать по заголовкам  title = models.CharField(max_length=120)

fk



<QuerySet [<Notes: Article 1>, <Notes: Article 2>, <Notes: Article 3>, <Notes: Article 4>, <Notes: spb>, <Notes: видео уроки>]>

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

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().

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