Форум сайта python.su
есть сайт каталог. нужно паказывать цены на товар в зависимости от того какой юзер залогинен. и есть такой момент что товары могут обьединятся в группы по цене. тоесть например нужно показать товары от 150-300 рублей и эта цена - это динамическое поле которое вычисляется в зависимости от скидки юзера.
как такое провернуть красиво в джанге ?
Офлайн
Я бы хранил градации цен со скидками в каталоге. Если конечно у Вас скидка не динамическая, а как обычно до 4-5 градаций. (5%, 10%, 15%, 20%, 25%)
Пользователей группировал бы по скидкам.
Соответственно в views формировал бы запросы в зависимости от прав/скидки пользователя.
Ну а все остальное выдавать в шаблон для всех одинаково включая группировку 150-300.
Не знаю красиво это или нет. Почему-то “на лету” вычисление всех цен не кажется правильным.
Интересно, какие варианты являются красивыми.
Офлайн
Тогда:
Первый вариант: все цены на этапе формирования представлений в views. Но это чревато неоправданными нагрузками на мозг пользователей и на сервер. Естественно при условии наличия большого количества товаров и высокой посещаемости.
Второй вариант: обработку скидок отдать Javascript`у в шаблоне. Но на мой взгляд, при фильтрации гемморой еще тот.
И третий вариант смешанный: при выдаче каталога без фильтров отдать обработку скидок Javascript`у в шаблоне. При формировании фильтра учитывать скидку конкретного пользователя (условие увеличивать на скидку) в представлениях, выдавать в общих ценах и обрабатывать темже Javascript`ом. Это будет наименее нагруженный вариант как для сервера, так и для клиента.
Отредактировано owlman (Май 30, 2012 07:35:30)
Офлайн
да, спасибо. вообще если у заказчика появляются всякие нетрадиционные идеи, нужно с ним по этому поводу проводить разъяснительные работы ) нужно требования пересмотреть )
Офлайн
owlmanВот-вот, не стоит этого делать.
Второй вариант: обработку скидок отдать Javascript`у в шаблоне. Но на мой взгляд, при фильтрации гемморой еще тот.
owlmanНе вижу смысла тащить головняк из второго пункта.
при выдаче каталога без фильтров отдать обработку скидок Javascript`у в шаблоне. При формировании фильтра учитывать скидку конкретного пользователя (условие увеличивать на скидку) в представлениях, выдавать в общих ценах и обрабатывать темже Javascript`ом. Это будет наименее нагруженный вариант как для сервера, так и для клиента.
Офлайн
LexanderА головняка из второго пункта и так не будет. Шаблону передаются суммы из каталога и процент скидки конкретного пользователя. Скрипт уменьшающий в шаблоне цены на заданное количество процентов не будет сложным. Зачем и самое главное, что проверять не совсем понимаю.
Не вижу смысла тащить головняк из второго пункта.
Кроме того, любые действия Javascript нужно будет перепроверять на сервере.
Поэтому так делать нет смысла.
LexanderЭмм.
По поводу нагрузки.
Если использовать Javascript, то в выборку нужно включать больше данных - шире выборка.
Разве это снижение нагрузки (особенно на базу)?
LexanderИ тут же:owlmanВот-вот, не стоит этого делать.
Второй вариант: обработку скидок отдать Javascript`у в шаблоне. Но на мой взгляд, при фильтрации гемморой еще тот.
LexanderПротиворечие? На чем собственно скриптовую клиентскую часть реализовывать Вы советуете, если Javascript использовать не стоит?
unkier
Скриптовую клиентскую часть (значения фильтров с учетом скидок) тоже можно сделать в шаблоне.
Вычисляйте краевые значения и динамически формируйте файл скрипта или вставляйте скрипт инлайн в текст страницы.
Если со временем перейдете от динамической скидки на фиксированную и захотите кэшировать скрипты, то тут тоже проблем не возникнет. Нагенерируете с десяток скриптов с разными значениями скидки и краевых диапазонов и подключайте нужный.
Отредактировано owlman (Май 31, 2012 12:58:42)
Офлайн
owlmanНе в сложности скрипта дело.
Шаблону передаются суммы из каталога и процент скидки конкретного пользователя. Скрипт уменьшающий в шаблоне цены на заданное количество процентов не будет сложным.
owlmanВсе данные, сгенерированные на клиенте нужно проверять.
Зачем и самое главное, что проверять не совсем понимаю.
owlman
Зачем включать больше данных?
owlmanА теперь копните еще глубже. База лежит на диске.
Речь ведь о Django шла, вот она родимая и работает с базой.
owlmanНикакого противоречия нет :)
Противоречие? На чем собственно скриптовую клиентскую часть реализовывать Вы советуете, если Javascript использовать не стоит?
Офлайн