Size: a a a

Django [ru] #STAY HOME

2020 July 08

AG

Artem Gubatenko in Django [ru] #STAY HOME
Dan Tyan
у меня нет

я если честно стараюсь таких больших запросов не писать
еще раз спасибо за ответы)
у меня выбор: или сравнить и получить в запросе, или в коде сравнивать поля у List[OrderStepJob] & List[Pricelist] по одному. Причем Pricelist надо сравнивать нужной версии, согласно OrderStepJob.created_at)
источник

RS

Rust Saiargaliev in Django [ru] #STAY HOME
Sergey Matveyev
Она достаточно длинная (110 строк), я такое стараюсь выносить в либу. Неправильный подход?
Ну почему, можно вынести в либу (ну или сервис там) если не устраивает наличие ее в моделях. Но либа будет принадлежать этой аппке, а та глобальная твоя либа где-то еще

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

A

Aquinary in Django [ru] #STAY HOME
Вот задачка всплыла интересная
Имеется форум, люли там пишут сообщения и т.д.
Например, пользователь "А" создаёт тему и некоторое количество других пользователей оставляет сообщения в ней.
А пользователь "Б" рядом с названием темы видит количество непрочитанных им сообщений. После захода в тему, количество непрочитанных сообщений сбрасывается, то есть для пользователя "Б" больше нет непрочитанных сообщений в этомй теме.
Пользователь "В" всё так же видит непрочитанные сообщения, заходит в тему и всё так же как у пользователя "Б".
Как это более правильно реализовать?
Мне в голову пришёл только такой вариант - при создании темы в отдельную таблицу forum_mention записывать всех пользователей сайта с указанием раздела/темы, как на скрине. Но это как-то... представьте, что у вас 5к пользователей и каждая тема это +5к
записей в таблицу.
Это как-то жирно. Неужели нет другого выхода?
источник

AG

Artem Gubatenko in Django [ru] #STAY HOME
Aquinary
Вот задачка всплыла интересная
Имеется форум, люли там пишут сообщения и т.д.
Например, пользователь "А" создаёт тему и некоторое количество других пользователей оставляет сообщения в ней.
А пользователь "Б" рядом с названием темы видит количество непрочитанных им сообщений. После захода в тему, количество непрочитанных сообщений сбрасывается, то есть для пользователя "Б" больше нет непрочитанных сообщений в этомй теме.
Пользователь "В" всё так же видит непрочитанные сообщения, заходит в тему и всё так же как у пользователя "Б".
Как это более правильно реализовать?
Мне в голову пришёл только такой вариант - при создании темы в отдельную таблицу forum_mention записывать всех пользователей сайта с указанием раздела/темы, как на скрине. Но это как-то... представьте, что у вас 5к пользователей и каждая тема это +5к
записей в таблицу.
Это как-то жирно. Неужели нет другого выхода?
Возможно есть специальные БД для таких данных, не знаю)
Но, как вариант, можно писать в отдельную таблицу из 3-х столбцов числа: user_id, topic_id, count
Будет занимать минимум места, на сколько это возможно
источник

A

Andrey in Django [ru] #STAY HOME
Artem Gubatenko
Возможно есть специальные БД для таких данных, не знаю)
Но, как вариант, можно писать в отдельную таблицу из 3-х столбцов числа: user_id, topic_id, count
Будет занимать минимум места, на сколько это возможно
Хорошее решение, но в целом можно избежать этого
источник

A

Andrey in Django [ru] #STAY HOME
Это же вычисляемое поле
источник

A

Aquinary in Django [ru] #STAY HOME
Artem Gubatenko
Возможно есть специальные БД для таких данных, не знаю)
Но, как вариант, можно писать в отдельную таблицу из 3-х столбцов числа: user_id, topic_id, count
Будет занимать минимум места, на сколько это возможно
По сути сейчас так и есть в текущем исполнении
Ещё думаю, что если пользователь не заходил в тему, априори ему показывать количество всех сообщений, просто считая их (то есть не создавать записей в forum_mention)
И только если пользователь зайдёт в тему, вот тогда эту запись создавать и считать
Т.е. если пользователь не заходит в тему, то там по умолчанию все сообщения непрочитанные
источник

AG

Artem Gubatenko in Django [ru] #STAY HOME
Andrey
Хорошее решение, но в целом можно избежать этого
согласен, только не понимаю по каким критериям можно вычислять)
Надо БД смотреть
источник

AG

Artem Gubatenko in Django [ru] #STAY HOME
Aquinary
По сути сейчас так и есть в текущем исполнении
Ещё думаю, что если пользователь не заходил в тему, априори ему показывать количество всех сообщений, просто считая их (то есть не создавать записей в forum_mention)
И только если пользователь зайдёт в тему, вот тогда эту запись создавать и считать
Т.е. если пользователь не заходит в тему, то там по умолчанию все сообщения непрочитанные
а как определяешь заходил или нет? сравниваешь время последней активности и время создания темы?
источник

A

Andrey in Django [ru] #STAY HOME
Artem Gubatenko
согласен, только не понимаю по каким критериям можно вычислять)
Надо БД смотреть
Ну по идее атрибут "прочитано" у сообщения должен быть, и ФК на топик, мердж таблица прочтений "сообщение, пользователь"
источник

A

Andrey in Django [ru] #STAY HOME
Дальше несложный джойн с  группировкой
источник

A

Andrey in Django [ru] #STAY HOME
Я как-то так вижу
источник

A

Andrey in Django [ru] #STAY HOME
Andrey
Ну по идее атрибут "прочитано" у сообщения должен быть, и ФК на топик, мердж таблица прочтений "сообщение, пользователь"
А так, нет
Я вру
источник

A

Andrey in Django [ru] #STAY HOME
Атрибут 'прочитано" не нужен
источник

A

Andrey in Django [ru] #STAY HOME
Тоже вычисляется
источник

A

Andrey in Django [ru] #STAY HOME
Когда пользователь прочитал сообщение, то добавляем в мердж таблицу запись просто
источник

A

Andrey in Django [ru] #STAY HOME
Вроде просто реализовать
источник

A

Aquinary in Django [ru] #STAY HOME
Artem Gubatenko
а как определяешь заходил или нет? сравниваешь время последней активности и время создания темы?
Всё прозаичней, в get самой темы (она всегда редиректит на последнюю страницу темы) просто обнуляется count для конкретного пользователя. Прям высчитывать, что он не прочитал 10 сообщений на предыдущей страницы нет желания
источник

A

Andrey in Django [ru] #STAY HOME
Схему базы могу накидать даже
источник

A

Andrey in Django [ru] #STAY HOME
И запросы накидать примерно
источник