Давид, привет! Есть таблица заказов. Через внешний ключ к каждому экземпляру заказа цепляется таблица со статусами заказа. Таблицу сделал отдельную, т.к. необходимо вести историю изменений каждого заказа. Вопрос: как написать запрос для вывода списка заказов с определенным статусом, например равным '1'? Т.е. организовать некий фильтр. На ум приходит такой код: def orders_list(request): orders = Order.objects.filter(orderstatus__status=1) return render(request, 'orders_list.html', context={'orders': orders}) Но проблема в том, что запрос возвращает все записи в которых хотя бы раз был статус, равный '1', а надо, чтоб брался только последний статус для каждого заказа и попадал в выборку. Упрощенный код модели Order и OrderStatus ниже: class Order(model.Model): customer = models.CharField('Клиент', max_length=200) product = models.CharField('Товар', max_length=200) ..... class OrderStatus(models.Model): STATUSES_LIST = ( ('1', 'Создан'), ('2', 'В обработке'), ('3', 'Отправлен'), ) order = models.ForeignKey(Order, on_delete=models.CASCADE) status = models.CharField(max_length=1, choices=STATUSES_LIST, default=1) status_date = models.DateTimeField('Дата изменения заказа')
@dobryakov4 жыл бұрын
Я бы посмотрел в сторону order_by и аннотаций. docs.djangoproject.com/en/3.1/topics/db/aggregation/
@OxoTHuK134 жыл бұрын
@@dobryakov спасибо за наводку! Прочитал про *annotate*, не совсем понял, зачем использовать *order_by*. Затем еще раз пересмотрел твое видео и просветление пришло на 14:06. Я заметил, что аггрегатор добавляет в кверисет дополнительное поле. В этом и был ключик к решению моей проблемы. Если интересно кому-то, то вот код: orders = Order.objects.annotate(Max('orderstatus__status')).filter(orderstatus__status__max=1) # orderstatus__status__max=1 - это как раз поле, которое добавил аггрегатор Max
@dobryakov4 жыл бұрын
Поздравляю!
@romanmed903528 күн бұрын
примеры в консоли выглядят совсем не так как в файле и непонятно к чему что лепить. вероятно тому кто понимает конечно и так все понятно, а вот тому кто не понимает, ну совсем не понятно так.
@zakchips4 жыл бұрын
Какое то время назад по просторам ИТ рынка бродил несчастный рекрутер, к искал мастра в SQLAlchemе на джанго проекте. Я в детали не вдавалась, однако задумалась, что было причиной имплементировать сторонний toolkit , а не юзать built-in ORM. Есть ли очевидные преимущества в этом? Спасибо.
@dobryakov4 жыл бұрын
В Django проекте точно нет смысла не использовать Django ORM. SQLAlchemy хорош для других фреймворков, таких как Flask или Bottle. Для асинхронных тоже можно его использовать, разумеется
@zakchips4 жыл бұрын
@@dobryakov спасибо.
@rushen81484 жыл бұрын
Django orm как и любой orm медленный и не позволяет писать сложных запросов, есть только возможность писать сырой sql. А sqlalchemy предоставляет query builder, позволяющий писать любые запросы в виде питон кода, что намного удобнее и лучше в поддержке, чем писать сырой sql.
@dobryakov4 жыл бұрын
@@rushen8148 коротко и по делу, спасибо!
@dd-pe5dp3 жыл бұрын
зачем показывать примеры в shell, если в реальности данные выводят на сайт??? пишу тоже самое в indexhtml и хрен
@dobryakov3 жыл бұрын
Потому что речь в ролике исключительно о работе с django orm, а не о работе с представлениями и темплейтами Официальная документация вам в помощь: docs.djangoproject.com/en/3.2/topics/templates/ docs.djangoproject.com/en/3.2/topics/class-based-views/
@eurweb3 жыл бұрын
кто не знает ОРМ, погугит, желательно только по теме