#15. Классы представлений: ListView, DetailView, CreateView | Django уроки

Поделиться
HTML-код
  • Опубликовано: 14 ноя 2024

Комментарии • 203

  • @MsTaburet
    @MsTaburet Год назад +59

    Картинки всё горячее с каждым уроком. Смотрю дальше)

  • @AJIagguH
    @AJIagguH 3 года назад +7

    Пытаюсь предугадать ваши действия, пишу код сам и проверяю по вам. Когда получается, радости полные штаны)

  • @АлексейМаслов-ж9щ
    @АлексейМаслов-ж9щ 3 года назад +8

    Насколько грамотная речь! И материал, и подача. Мне все очень понравилось

  • @vladimirsmolkotin2619
    @vladimirsmolkotin2619 2 года назад +9

    Урок просто блестящий. В одном уроке я столько своих вопросов закрыл, что нет слов. Удачи автору!

  • @isded1681
    @isded1681 2 года назад +3

    На много упрощает код. Благодарю за видеоматериал!

  • @friend1cat
    @friend1cat 3 года назад +13

    Спасибо, Сергей! Сегодня займусь Вашим курсом по ООП. Все отлично.

  • @СергійКаращук-й8х
    @СергійКаращук-й8х Год назад +2

    Сергей, вы прекрасный учитель. К сожалению, столкнулся с проблемой, что теперь хочу учить материал исключительно по вашим урокам. :) Мне кажется, что ученикам было бы очень интересно учить вместе с вами git или хотя-бы gitlab. Вы лучший. Спасибо большое за ваши труды.

  • @dmitryzagorevskiy507
    @dmitryzagorevskiy507 2 года назад +4

    Супер! Спасибо! Это очень существенная особенность Django!

  • @КириллАль-Шаер-х2ю

    Спасибо огромное!! Так рассказывать это дар! Спасибо!

  • @artur.tokranov
    @artur.tokranov 3 года назад +2

    Учитель от Бога

  • @igorkulibaba7287
    @igorkulibaba7287 3 года назад +4

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

  • @citricmint_forstudy4608
    @citricmint_forstudy4608 2 года назад +14

    я думала мы вместо allow_empty = False будем ручками прописывать условие и рейзить Http404, а оказывается и для этого свой аттрибут есть)) мне прям даже как то неудобно, что джанго за нас все делает 😀

  • @shettalker4593
    @shettalker4593 3 года назад +8

    Я посмотрел только 6 минуту, но уже понял что ты топовый програмист, подписка и лайк, удачи в продвижении

  • @Radag0nn563
    @Radag0nn563 3 года назад +4

    Спасибо Вам за такую полезную информацию, Вы спасли мой проект))

  • @kirilldyatko3978
    @kirilldyatko3978 3 года назад +2

    Большое спасибо! По документации не очень понятно, как оно всё работает, теперь документацию можно смотреть более осознанно

  • @x-user-agent
    @x-user-agent 3 года назад +1

    оооо... супер👍 в основном ради class based views смотрел этот курс

  • @donfedor007
    @donfedor007 3 года назад +4

    Спасибо Вам за урок! Очень интересная тема! Теперь главное правильно выбирать класс родитель) Круто!

  • @Korolex1
    @Korolex1 Год назад +1

    Как всегда, видеоурок на высоте!

  • @ivanmain9659
    @ivanmain9659 2 года назад +1

    Автор - ты лучший!

  • @bernardsoul8936
    @bernardsoul8936 Год назад +4

    На этом примере понял, как удобно использовать Templatetags. Так как я ранее менюшку сайта вынес в отдельный тег, то сейчас не нужно постоянно ее прописывать

  • @rosrostovskiy2631
    @rosrostovskiy2631 Год назад +39

    Чувствую, что к 26 уроку фотографии уже нужно будет цензурить😄

    • @tihunvolkov9288
      @tihunvolkov9288 Год назад +2

      А ты думал для чего там галочка не публичные)

  • @ВиталийКалиниченко-х8э

    Спасибо, Сергей, за твои уроки!

  • @ДмитрийГлотов-ь8х
    @ДмитрийГлотов-ь8х Год назад +1

    нейминг божественный конечно

  • @Alichok59
    @Alichok59 2 года назад +7

    Мой маленкий совет для всех сделать кнопу "админ" в меню, чтобы в процессе содания сайта быстро переходить на страницу администратора!) просто настроить для нее url и написать функцию с содержимым "pass"

    • @fallennephalem1258
      @fallennephalem1258 2 года назад +4

      а потом менять фронтенд, когда будешь её удалять

    • @PavelNebo
      @PavelNebo Год назад

      разве написать admin в адресе долго ?

  • @citricmint_forstudy4608
    @citricmint_forstudy4608 2 года назад +1

    спасибо за такие замечательные уроки. Смотрю этот курс и параллельно документацию на русском языке, очень удобный комплект для обучения получается) потом уже если углубляться, не так страшно будет)

  • @lil_fritch
    @lil_fritch Год назад +1

    def get_context_data(self, **kwargs):
    context = super().get_context_data(**kwargs)
    name = Category.objects.get(slug=self.kwargs['category_slug']).name
    context['title'] = f'Категория - {name}'
    return context
    Так тоже работает вывод названия категории в заголовок

  • @wrestler91100
    @wrestler91100 Год назад +4

    Из этого занятия стало понятно, что автор не выполнил домашнее задание по отображению главного меню через включенный тег))

  • @БогданСыроватский-б6ж

    На 7:04 сказано, что можно передавать только неизменяемые данные в extra_context,
    но такой код сработал (использую Django 4. Возможно, в третьей версии нельзя было):
    class Mixin():
    menu = [{'title':'статьи','url':'list'},
    {'title':'новая','url':'new'},
    {'title':'инфо','url':'about'},
    {'title':'тема','url':'theme'},
    {'title':'вход','url':'login'}
    ]
    context = {
    'menu': menu,
    'style': styles[0]
    }
    class List_page(Mixin, ListView):
    '''ОТОБРАЖЕНИЕ СПИСКА СТАТЕЙ'''
    model = Page
    context_object_name = 'list'
    template_name = 'pager/list.html'
    extra_context = Mixin.context
    Закинул меню таким же списком в словарь context миксина, а потом, наследовав (Mixin, ListView),
    передал в extra_context этот список Mixin.menu, и всё заработало в таком простом формате.
    p.s. спасибо за уроки, Сергей!

    • @selfedu_rus
      @selfedu_rus  Год назад

      Да, я здесь не совсем верно сказал, в extra_context можно прописывать только те данные, которые известны (существуют) на момент описания класса.

  • @Максим-т5ш8и
    @Максим-т5ш8и 2 года назад +2

    Решил вернуться к этой теме, на своём проекте реализовать DetailView. Долго мучался с FieldError. Оказалось дело в том, что у меня в модели по-другому поле со слагом называется. Итого решение - надо переопределить параметр slug_field - присвоить ему название слага в моей модели

  • @БогданФещенко-я6й
    @БогданФещенко-я6й Год назад +1

    Thank you, sir!

  • @Magpie2123
    @Magpie2123 3 года назад +17

    Привет! Все супер, но у меня вопрос: на 24й минуте строка 88 context['title'] = context['post'] по моему она сработала только потому, что у класса был определен метод __str__, не будет ли более правильно написать context['title'] = context['post'].title? Какое Ваше мнение?

    • @selfedu_rus
      @selfedu_rus  3 года назад +9

      Да, совершенно верно! Вы первый, кто это отметил! Наверное, лучше все-таки явно указывать title, чтобы избежать возможных ошибок, здесь я с Вами полностью согласен.

    • @crazyhowling2203
      @crazyhowling2203 3 года назад +1

      @@selfedu_rus Думаю если ещё можно, то стоит отметить это в описании видоса

    • @dmitryzagorevskiy507
      @dmitryzagorevskiy507 2 года назад +4

      Приветствую! Отличное уточнение, только не tYtle, а title. Исправьте, пожалуйста, чтобы кто-то не повторил опечатку. Спасибо!

    • @Magpie2123
      @Magpie2123 2 года назад +2

      @@dmitryzagorevskiy507 Спасибо, попоавил.

  • @kohan______
    @kohan______ Год назад +4

    Не совсем понятен механизм сохранения формы и добавление поста в базу данных. Не могу понять в какой момент, почему и откуда Джанго знает о том, что нужно добавить данные в базу данных в классе AddPage. Был бы благодарен, если бы Вы мне смогли обьяснить!)

  • @leva1672
    @leva1672 3 месяца назад +2

    Единственное, непонятно теперь, может кто объяснит, как класс понимает какой слаг передали
    И как он его обрабатывает?

  • @exe88cution
    @exe88cution 3 года назад +2

    Красиво, спасибо огромное

  • @grybook4205
    @grybook4205 2 года назад +5

    Можно добавить в class show_post функцию
    def get_queryset(self):
    return Women.objects.filter(is_published=True)
    если без нее, то можно открыть не опубликованный пост по слагу
    в тестирование переиграл :)

    • @vanillawire1717
      @vanillawire1717 Год назад

      Мне кажется лучше использовать get_object(self):
      def get_object(self):
      """Выбор нужной записи из таблицы 'Women'"""
      return get_object_or_404(Women, slug=self.kwargs['post_slug'], is_published=True)
      Так как я использовал ваш вариант и пытался просто filter() заменить на get() и выдавало ошибку, что оно находит не 1, а сразу 5 записей, что натолкнуло меня на мысль, что нужно туда добавить в условие проверку по slug(но оставить использовать filter()) или найти в документации Django подходящую функцию, для получения одной записи(как я показал в самом начале).

  • @snazh5046
    @snazh5046 Год назад +1

    мне кажется в 17:38 для отображения заголовка лучше использовать f строку(context['title'] = f"Category: {context['publications'][0].cat}")

  • @oosmk4203
    @oosmk4203 3 года назад +1

    мужык, ты лучший

  • @АртемКлимов-ц8ъ
    @АртемКлимов-ц8ъ Год назад +5

    Вот это упростили конструкцию так упростили )))) было 3 строчки кода стало 23 ))))))))

  • @viktorsokolov8153
    @viktorsokolov8153 2 года назад +1

    Спасибо за уроки. Возник диссонанс. Почему template_name - index.html, но в urls мы указываем category html.

  • @David-yj5kv
    @David-yj5kv 3 года назад +4

    Здравствуйте. Использую ваш курс как наглядный пример и как посредник между документацией (смотрю как делаете вы - читаю про это в документации, книге или гугле. Так, сухая документация подкрепляется реальной структурой и выстраивается полная картина проекта). Спасибо огромное. Но информации очень много и усвоить без большого количества практики - невозможно. Можете посоветовать хорошее задание? С одной стороны нагугленные по запросу проекты "для джуниор джанго дев" ещё слишком абстрактные и сложные, с другой стороны сделать простые несколько страниц сайта, с несложными моделями и логикой я уже умею. Спрашиваю на случай если у вас есть хорошее отработанное задание, а так, конечно, буду искать сам, благо технология не малоизвестная. В целом просто хотел сказать вам спасибо. Ваш канал - это находка. Обязательно послушаю про генетические алгоритмы и многое другое, после того как смогу начать реальную работу в текущей области)

    • @selfedu_rus
      @selfedu_rus  3 года назад +3

      Спасибо! Заданий так то не делал. Как вариант попробуйте сделать более сложный сайт с набором большого числа изображений (например, формул в тексте). Подумайте как хранить такие страницы на стороне сервера, как загружать. Еще вариант сделать простой форум.

  • @yarik83men51
    @yarik83men51 3 года назад +4

    Спасибо

  • @nnutipa
    @nnutipa 3 года назад +6

    На примере первых двух классов представлений и не скажешь, что есть выигрыш в количестве кода, функции выглядят компактнее.

    • @selfedu_rus
      @selfedu_rus  3 года назад +4

      В реальности кода в функциях представлений гораздо больше, особенно, при работе с формами и здесь классы представлений очень выручают.

  • @alicelews2282
    @alicelews2282 3 года назад +4

    Спасибо!
    Надеюсь, у вас появятся видео по переводу сайта на другие языки

    • @vladkrolik2700
      @vladkrolik2700 2 года назад

      ??? в настрой поставить другой язык и все вроде

    • @stevejops007
      @stevejops007 2 года назад

      @@vladkrolik2700 нууу почти...=)

    • @vladkrolik2700
      @vladkrolik2700 2 года назад +1

      @@stevejops007 Фамилия как у меня )

  • @ll-uh2rz
    @ll-uh2rz Год назад +1

    Сергей, спасибо за уроки! Подскажите, почему класс WomenCategory работает без указания slug_url_kwarg, а ShowPost нет?

    • @selfedu_rus
      @selfedu_rus  Год назад

      ой я уж спустя 2,5 года и не помню что за WomenCategory )) спросите в сообществе телеграм-канала, вам там подскажут.

  • @васяпупкин-ч9ф5л
    @васяпупкин-ч9ф5л Год назад +1

    Привет! Спасибо за уроки! Один момент я написал extra_context и передал туда меню и у меня все сработало без функции Def get_context_data

    • @НиколайРюмин-й6и
      @НиколайРюмин-й6и Год назад +1

      Потому что в данном случае у нас меню это статичная переменная, но если она будет меняться динамически, в зависимости от того какая страница у нас представлена то что-то пойдет не так.(допустим меню генерирует отдельная функция по объекту который передается в нее из класса или что-нибудь подобное).

  • @mnogokotin
    @mnogokotin 2 года назад +1

    спасибо за видос )

  • @АлександрТибабишев
    @АлександрТибабишев 2 года назад +1

    Спасибо за уроки, самые лучшие в RUclips ! У меня вопрос: Вы показали , как сделать автоматическое заполнение поля slug в меню-админа, а как сделать это через поле формы (где ее добавляет пользователь через CreateView... -.)?

    • @selfedu_rus
      @selfedu_rus  2 года назад +1

      средствами JS, можно самостоятельно написать, можно найти фрагмент на просторах Интернета

  • @garrywood9195
    @garrywood9195 2 года назад +1

    Спасибо за превосходное объяснение. Это лучшее, что я находил.
    Есть вопрос по этим классам. Во все классы мы добавляли динамический контекст. Можно объявить базовый класс с этими методами и далее наследоваться в дальнейшем? Или я забегаю вперед?

    • @selfedu_rus
      @selfedu_rus  2 года назад

      да, конечно, весь спектр возможностей ООП здесь можно применять

  • @passionarij
    @passionarij 3 года назад +1

    Круто! Отдельное спасибо за фотки барышень)

  • @artur.tokranov
    @artur.tokranov 2 года назад +2

    Я пересматриваю уроки, спасибо! Хотя уже работаю программистом

  • @lil_fritch
    @lil_fritch Год назад +3

    Спасибо большое за урок!
    У меня возник вопрос: зачем в определении функции
    def get_context_data(self, *, object_list=None, **kwargs):
    мы передаем "*" и "object_list=None", если оно все равно не используеться?

    • @stmustbk
      @stmustbk Год назад +1

      Мне кажется что оно используется, просто когда его все же нет, мы передаём его как None. Чтобы Джанго не выдавал ошибку

    • @nevermore222
      @nevermore222 Год назад

      ​@@stmustbkя его из кода убрал . Ничего вроде не поменялось

    • @stmustbk
      @stmustbk Год назад

      @@nevermore222 в старых версиях приходилось его писать

    • @nevermore222
      @nevermore222 Год назад

      @@stmustbk а ну то есть сейчас достаточно писать self в аргументах и более ничего не указывать и он будет работать? Теперь вроде бы ясно стало спасибо

  • @Максим-т5ш8и
    @Максим-т5ш8и 2 года назад +1

    Ох же, сложновато! Буду разбираться, но смогу :)

  • @misha8280
    @misha8280 2 года назад +2

    Когда лучше использовать классы представления, а когда функции?

  • @vadimnosurname
    @vadimnosurname Год назад +1

    кстати, я вот сижу и думаю, а почему у меня меню отображается? Потом вспомнил, что мы делали свой тег для категорий и для меню по желанию. Удобно

  • @2000Vladik
    @2000Vladik 3 года назад +2

    Респект!!!

  • @walkin-det
    @walkin-det Год назад

    Очень круто и профессионально. Мне очень нравится. Жаль только что сайт закрыт. Не понимаю, так мало времени прошло

  • @bastibubu5154
    @bastibubu5154 2 года назад +2

    Большое спасибо за супер уроки!
    Пожалуйста ответьте на один вопрос: Если в адресном поле пишем адрес тогда всё понятно, вызывается функция path и ищет соответствие адреса к маршруту и если есть соответствие тогда вызывается представление и потом уже шаблон.
    А вот когда нажимаем кнопку "читать пост" тогда кто кого вызывает? Откуда начинается цепь вызовов? В этом случае в адресном поле мы же ничего не пишем!

    • @selfedu_rus
      @selfedu_rus  2 года назад +1

      Когда нажимаете на кнопку, то это такой же переход по URL-адресу, который в ней прописан. Если это обычная ссылка, то имеем GET-запрос к серверу, если форма, то может быть и дургой тип запроса.

    • @bastibubu5154
      @bastibubu5154 2 года назад

      @@selfedu_rus Понял. Спасибо!

  • @stevejops007
    @stevejops007 2 года назад +1

    template_ name можно и не передавать, если шаблон назвать соответственно (в данном случае women_list и women_detail) тогда джанга их автоматом найдет

  • @TheStalkerEagle
    @TheStalkerEagle 3 года назад +2

    Спасибо за урок!
    Но почему бы в get_queryset не возвращать вместо "Women.objects.filter(...)" "self.model.objects.filter(...)"?

    • @selfedu_rus
      @selfedu_rus  3 года назад +1

      Упс... я уже сейчас такую тонкость не помню )

  • @mrduckvc
    @mrduckvc 2 года назад +1

    Всё прекрасно, но есть вопрос, почему бы WomenCategory не наследовать от WomenHome и просто переопределить нужные методы? Просто ключевое отличие в фильтре.
    ИЛИ сделать всё ещё хитрее и определить некий WomenView где мы допустим будем указывать все стандартные методы(допустим настройки header) и от него уже дальше наследоваться.

  • @dmitryzagorevskiy507
    @dmitryzagorevskiy507 2 года назад +3

    Сергей, не обязательства ради, а понимания для, не могли бы Вы примерно сориентировать какие у Вас предположительные прогнозы по времени начала и окончания вашего очередного шедеврального курса по Django REST framework? Заранее большое спасибо хотя бы за очень приблизительный прогноз по времени.

    • @selfedu_rus
      @selfedu_rus  2 года назад +1

      думаю, в конце января начнем )

  • @tesmanit
    @tesmanit 9 месяцев назад +1

    Здравствуйте. Можете подсказать, в джанго kwargs имеет только параметры маршрута, или еще что-то?

  • @dursinear8761
    @dursinear8761 3 года назад +2

    Спасибо, прекрасный урок. Но возник один вопрос. 24:29 , 51 строка, почему нельзя использовать редирект на ‘home’?

    • @crazyhowling2203
      @crazyhowling2203 3 года назад

      Так можно или нельзя? Самому интересно

  • @РобертАлександров-к8ы
    @РобертАлександров-к8ы 11 месяцев назад

    вопрос, почему на каждый шаблон мы передаем menu неужели нельзя сделать в базовом шаблоне и больше к нему не возвращаться?

  • @rostislavmalyshev1775
    @rostislavmalyshev1775 3 года назад +5

    Спасибо, суть понятна! Но кажется, что для небольших Вью вполне можно ограничится функциями.

    • @selfedu_rus
      @selfedu_rus  3 года назад +4

      Конечно, что удобнее, то и используется!

  • @eazy8537
    @eazy8537 2 месяца назад +1

    А что с ссылкой "Список базовых классов" в описании?

  • @SectorGm
    @SectorGm 3 года назад +1

    Спасибо!

  • @Anonim-im6ln
    @Anonim-im6ln 2 года назад +1

    Супер!) Дякую:)

  • @AlexeyTeacher
    @AlexeyTeacher 2 года назад +1

    Спасибо вам за уроки. Очень внятно и подробно. Почему то при открывании поста через класс. Не хочет работать slug по какой-то причине конфликтует с pk.
    С функцией все работает. Пользовательский слаг везде переименовал. На всякий случай удалил старые миграции, и заново сделал. Но все равно ругается на эти атрибуты(

    • @AlexeyTeacher
      @AlexeyTeacher 2 года назад

      Если сделать по pk, то начинает работать. Но странно, я же делаю слаг(

    • @AlexeyTeacher
      @AlexeyTeacher 2 года назад

      Это только detailview только проблема(

    • @selfedu_rus
      @selfedu_rus  2 года назад

      да, по умолчанию идентификатор в Django следует брать по атрибуту pk

    • @AlexeyTeacher
      @AlexeyTeacher 2 года назад

      @@selfedu_rus Но как переделать на слаг?)

    • @selfedu_rus
      @selfedu_rus  2 года назад

      @@AlexeyTeacher Я, вроде, там дальше показываю, как по слагу выбирать запись (если не в этом, то в другом уроке).

  • @ShadowStormlq5mwdasd
    @ShadowStormlq5mwdasd 2 года назад +1

    При cat тоже работает context['cat_selected'] = context['posts'][0].cat - вместо cat_id - я помню Сергей говорил, что это почти одно и то же - я проверил в shell и там cat возвращает то что мы определили в __str__ в модели, а cat_id - pk (id, fk - кому как угодно) Category - я так понимаю мы ставили там cat_id для шаблона list_categories - но при изменении про которое я написал - всё работает - кто-то может объяснить почему?

  • @deniskrepak
    @deniskrepak 3 года назад +1

    context["posts"][0].cat работает только в том случае, если есть хотя-бы одна запись, У меня идет еще категория "Другое" без записей, и она так не отображается, падает ошибка

  • @ВладимирБузмаков-ь3и

    Спасибо! шаг за шагом появляется ясность. У меня вопрос. Если модель1 имеет форин кей к другой модели2, и мне нужно сделать форму по добавлению записи в модель1. Как мне это сделать? джанго ругается, что поле не ссылается на внешнюю модель2 (мне понятно, что там такой записи нет). Как сделать, чтобы объединить такое добавление? просто сделать модель2.objects.create(поле='значение') и потом form.save()?? или есть проще метод?

    • @selfedu_rus
      @selfedu_rus  Год назад

      Лучше это обсудить в ТГ-канале (ссылка под видео). А в двух словах, Django, скорее ругается, что поле не заполнено (а не то, что оно не связано, связь, как раз в модели указана). Тут возможно параметр default нужно еще прописать, тогда при добавлении новой записи в модель2 пойдет значение по умолчанию, но тогда оно будет дублироваться, а это, скорее всего, недопустимо. В общем, надо подумать, чтобы не было дублирования и значение автоматом прописывалось. Варианты есть.

  • @alex_satan
    @alex_satan 2 года назад +1

    Годнота-то какая))
    Лепота)

  • @sainco3036
    @sainco3036 3 года назад +1

    Спасибо.

  • @equa_tory
    @equa_tory Год назад +2

    У меня авто перенос почему то сломался

  • @gkenjutsu
    @gkenjutsu 3 года назад +2

    Объясните пожалуйста, в каких случаях лучше использовать какой класс View

    • @selfedu_rus
      @selfedu_rus  3 года назад +1

      В зависимости от вида выдаваемой информации на странице (список, статья, форма и т.п.).

  • @WolfKrugerr
    @WolfKrugerr 2 года назад +1

    У меня почему то не отображаются поля в классах CreateView и FormView. Может из-за того что они унаследованы от ModelForm в файле forms.py?

  • @nevermore222
    @nevermore222 Год назад

    Вот я что то не понимаю . А зачем в аргументах get_context_data - '*' и 'object_list=None' ? Я их вроде удалил и ничего не поменялось . Да и нигде не используется оно вроде бы

  • @РавильШаймердянов
    @РавильШаймердянов 3 года назад +1

    Good man)

  • @Национал-предатель
    @Национал-предатель 2 года назад

    Ох, как всё сложно. Спасибо за урок, как всегда очень подробно. А зачем вообще делать эти все представления, а не просто по конкретным URL выдавать нужные html страницы и в них выводить как и раньше? Так выглядит намного сложнее всё. В данный момент я разбираюсь с wagtail, там чуть проще, но нужно и простой джанго знать так же.

    • @johndoe9604
      @johndoe9604 2 года назад

      Выглядит сложнее по началу, но в последующем, если ты будешь писать большое веб-приложение, будет много головной боли если делать все «по простому»

  • @АлександрБердышев-с5ы

    Добрый вечер!
    Как правильнее то в итоге делать: на функциях или на объектах???

    • @selfedu_rus
      @selfedu_rus  2 года назад

      зависит от задачи, как удобнее

  • @kedrjack4649
    @kedrjack4649 Год назад

    На 11:15
    Думаю лучше писать не
    return Women.objects.filter(is_published=True)
    А;
    return self.model.objects.filter(is_published=True)
    чтобы не нарушать принцип так какой-то про хранение всего в одном месте

    • @urrchach
      @urrchach Год назад

      Мне не помогло😢

  • @zeinmusic3649
    @zeinmusic3649 Год назад +1

    Подскажите пожалуйста, если я еще на прошлом уроке наш список menu "обернул" в inclusion_tag и передал функцию в base.html будет ли это "ошибкой" или недочетом, хотя теперь наше меню у нас есть всегда)

    • @selfedu_rus
      @selfedu_rus  Год назад

      можно, ошибки не будет

    • @zeinmusic3649
      @zeinmusic3649 Год назад

      @@selfedu_rus благодарю вас!)

  • @163AlejanD
    @163AlejanD 2 года назад +1

    Чтобы уходило на 404 ruclips.net/video/_0IDdU6PDJo/видео.html можно также номер категории брать не из модели Women а отдельным запросом из модели категории и из него же брать title:
    cat = Category.objects.get(slug=self.kwargs['cat_slug'])
    context['cat_selected'] = cat.pk
    context['title'] = 'Категория - ' + cat.name

  • @Maksym-Vsesvit.ai-Maksym
    @Maksym-Vsesvit.ai-Maksym Год назад +2

    У меня одного возникает проблема, что статья при добавлении через пункт меню добавлении статьи не сохраняется? И если посмотреть в инструментах разработчика на вкладку network > headers, то оказывается при добавлении статьи у нас срабатывает метод GET, а не POST. И я так понимаю, что именно поэтому статья и не сохранилась.
    Если добавлять статью через админку, то все ок.
    Кто знает, как это можно исправить?

    • @selfedu_rus
      @selfedu_rus  Год назад +1

      В теге form должен быть указан параметр method="POST".

    • @Maksym-Vsesvit.ai-Maksym
      @Maksym-Vsesvit.ai-Maksym Год назад +1

      спасибо, Сергей. Пол дня вчера не мог понять в чём проблема. Вроде и метод в теге форм указал ПОСТ... Оказалось банальная опечатка: вместо method = "POST", написал methodS="POST".
      Спасибо за прекрасное изложение материала и за фит-бек, который Вы даёте😇

  • @ЕгорТупикин-л6ъ
    @ЕгорТупикин-л6ъ Год назад +1

    здравствуйте, извините, при проектирование подобного сайта возник вопрос, а что делать, если, условно, я хочу вывести в блок контента не только статьи, но и сами категории, вот так к примеру, певица: Пугачева, Лолита; актрисы: ходченкова; и возникает ВОПРОС, а как корректно передать класс представления несколько моделей ? Не уверен, что смогу получить ответ, но все же мало ли, заранее спасибо за ответ, многоуважаемый автор!!!

  • @Manu-ei6tn
    @Manu-ei6tn 2 года назад

    На 23:21 Как класс представления ShowPost понял, что нужно брать одну запись и именно с Шакирой (на которую нажали)? В функции представлении мы делали фильтрацию по слагу. А здесь как?

    • @V.D.
      @V.D. Год назад

      Автору вопроса, надеюсь, уже давно всё понятно, а тем, кому не понятно - по полю РК или слаг. ?В этом случае по слагу "тайтл" = имя героини? Через урлконф

  • @АртурХасиев-ж8с
    @АртурХасиев-ж8с Год назад +1

    аааааааа помогите!!!!!!!!!!!! да где же теперь у нас form в комментах, как мы в addpage.html получаем тот же результат, form это теперь какая переменная???? пожалуйста, что за нейминг, объясните как, очень прошу, задолбался уже((((((((

  • @WolfKrugerr
    @WolfKrugerr 2 года назад

    Как нужно прописать форму в шаблоне? Так же как и раньше?

  • @helish_88
    @helish_88 3 года назад +1

    И django сам проверит если форма валидна? is_valid() спс за уроки, у вас самые топовые

    • @selfedu_rus
      @selfedu_rus  3 года назад +2

      да, в соответствии с настроенными валидаторами в модели формы

  • @_sergeevich5827
    @_sergeevich5827 2 года назад +1

    Отлично !!!

  • @pioner2711
    @pioner2711 2 года назад +2

    У меня почему то класс от CreateView работает только от класса формы которая непосредственно связана с моделью, с формами не связанными с моделью выдает ошибку type error 'BaseForm.__init__() got an unexpected keyword argument 'instance'' Сергей подскажите в чем проблема?

    • @selfedu_rus
      @selfedu_rus  2 года назад +1

      Вам лучше этот вопрос в сообщество в телеграм-канале задать, там быстро ответят!

    • @pioner2711
      @pioner2711 2 года назад +1

      Я так понял, что CreateView нужен именно для работы с формами связанными с моделями, а для форм не связанными с моделями нужно наследоваться от FormView???

  • @АндрейАндреев-г4ц
    @АндрейАндреев-г4ц 2 года назад +2

    У меня эта шапка сайта с навигацией сразу работала на главной странице, это из за того что я сделал домашнее задание?

  • @suhanoves
    @suhanoves 3 года назад

    В ShowPost забыли добавить context['cat_selected'] = context['post'].cat_id, чтобы при просмотре поста выделялась категория, к которой принадлежит девушка (по мне это не очень решение, т.к. я не могу теперь перейти быстро на всех девушек из этой категории, но так было в функции отображения, но пропало в классе) :)

    • @selfedu_rus
      @selfedu_rus  3 года назад

      Уже не помню такие что было в 15-м занятии, возможно, просто демонстрировал празличные классы представлений. На следующем все это сделано через миксины.

  • @vitali1959
    @vitali1959 3 года назад +3

    а если нужно передать пользователю вайл из (media) базы данных как download в вормати .txt как это лутше зделать?

    • @selfedu_rus
      @selfedu_rus  3 года назад +1

      Из БД или media? Это разные вещи. Вообще для скачивания каких-либо файлов можно создать специальную страницу с прикрепленным файлом. Например, можно посмотреть здесь snipp.ru/php/send-download (правда, там с использованием PHP, но принцип един).

    • @vitali1959
      @vitali1959 3 года назад +1

      @@selfedu_rus на фласке это было очень просто:
      app.py - - - >
      @app.route('/download_file', methods=['GET', 'POST'])
      def download_file():
      if 'userLogged' in session:
      file_txt = "WebTools/Evaptray/example-input-evaporate.txt"
      return send_file(file_txt, as_attachment=True)
      return redirect(url_for('login'))
      html - - - - >
      Input file - example
      на django хочетса реализовать кат что-бы admin заходил в админ панел, загружал "update.txt" и этот актуальный файл преподноситса затем для скачиванье на html странице.

    • @selfedu_rus
      @selfedu_rus  3 года назад +1

      @@vitali1959 Вот здесь можно посмотреть django.fun/tutorials/kak-zagruzit-fajly-s-django/

    • @vitali1959
      @vitali1959 3 года назад +2

      @@selfedu_rus Спасибо, Сергей! у меня все получилось.
      media:
      example-input-file.txt
      views.py:
      def download_csv(request):
      file_path = os.path.join(settings.MEDIA_ROOT, 'example-input-file.txt')
      if os.path.exists(file_path):
      with open(file_path, 'rb') as fh:
      response = HttpResponse(fh.read(), content_type="text/plain")
      response['Content-Disposition'] = 'inline; filename=' + os.path.basename(file_path)
      return response
      urls.py:
      path('download_csv/', views.download_csv, name='download_csv'),
      download.html:
      a href="{% url 'download_csv' %}" download=""

    • @selfedu_rus
      @selfedu_rus  3 года назад +1

      @@vitali1959 Круто, я даже сохранил ваш вариант, спасибо! )

  • @Anton-eu2qx
    @Anton-eu2qx 3 года назад

    Добрый день! Помогите советом. Цель: создать список фотоальбомов(категории), добавлять в них фото, в зависимости от альбома. Вопрос: как правильно прописать функцию get_queryset для вывода фото по выбранному альбому?
    # Модель альбома с фотографиями
    class Album(models.Model):
    title = models.CharField(max_length=100, verbose_name='Название Альбома')
    slug = models.SlugField(unique=True, db_index=True, verbose_name='URL Альбома')
    image = models.ImageField(upload_to='photo/%Y/%m/%d', verbose_name='Обложка')
    def __str__(self):
    return self.title
    def get_absolute_url(self):
    return reverse('gallery', kwargs={'album_slug': self.slug})
    class Meta:
    verbose_name = 'Album'
    verbose_name_plural = 'Albums'
    ordering = ['title']
    # Модель фото для альбома
    class Photo(models.Model):
    photo = models.ImageField(upload_to='photo/%Y/%m/%d', verbose_name='Фото')
    album = models.ForeignKey(Album, on_delete=models.PROTECT, null=True, verbose_name='Альбом')
    class Meta:
    verbose_name = 'Photo'
    verbose_name_plural = 'Photos'

  • @kadyrkulove
    @kadyrkulove 3 года назад +3

    Я правильно понимаю что get_queryset он связан с ListView ?

    • @kadyrkulove
      @kadyrkulove 3 года назад +1

      Сорри за тупой вопрос! Разобрался)

    • @baldeagle6531
      @baldeagle6531 3 года назад

      @@kadyrkulove какой ответ на вопрос?

  • @glieseb-yo4sk
    @glieseb-yo4sk 2 года назад

    Когда пишем context = super().get_context_data(), зачем передавать **kwargs? Сначала забыл написать, а потом смотрю, и так всё работает во всех классах.

    • @selfedu_rus
      @selfedu_rus  2 года назад +1

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

  • @АртурХасиев-ж8с
    @АртурХасиев-ж8с Год назад

    хмб.. у меня меню уже в пользтегах, вот если оно так, то могу же я просто выдернуть словари из тегов?? только не получается чего-то

  • @Edward-y2h
    @Edward-y2h 2 года назад

    Вы говорите что в словаре extra_context можно передавать только статические данные, это не так. У меня любые данные работают: списки, выборки из моделей, можно хоть форму передать. Меню отлично передается и работает. Я что то упускаю?