Задать вопрос
vikkyshostak
@vikkyshostak
< This head full of dreams.

Django. Есть ли встроенный механизм пред-сохранения данных перед сохранением модели?

Доброго времени года!

Интересует вопрос: есть ли в Django (1.11/2.х) встроенный механизм пред-сохранения данных перед сохранением модели? Поясню. Например, есть модель, которая реализует форму заявки на наличие товара (поля: ФИО, телефон, почта, ID товара со страницы, связь с ID юзера).

Сложность в том, что для функционирования данного примера — нужен ещё и ID юзера, то есть данную заявку могут видеть все, но отправлять (сохранять) только зарегистрированные пользователи.

Так вот. Как сделать (штатными методами Django), чтобы данные из формы сохранялись в какой-нить Redis, приложение переходило на страницу логина, при успешной авторизации — доставало из Redis все данные + присваивало ID пользователя (который теперь есть) — только после этого сохранялось в БД (Postgres)?

Вопрос нубский, но никогда не сталкивался с подобной задачей.. поэтому, очень хотелось бы послушать best practice по этой теме, но буду рад и просто толковым комментариям. Спасибо! :)
  • Вопрос задан
  • 457 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev Куратор тега Django
Седой и строгий
Есть. Можно переопределить в модели метод save() и можно зарегистрировать обработчик сигнала pre_save. Но правильное решение - это показывать форму только авторизованным пользователям.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Sovetnikov
технический директор pulsprodaj.ru
Я так понимаю вам надо:
1. Показать форму заявки незарегестрированному пользователю
2. Принять заявку через форму у этого пользователя и направить на страницу регистрации
3. После того как пользователь зарегестрировался, создать для него заявку в системе от его имени
Так?

1. Делайте сущность "ПредварительнаяЗаявка" аналогично вашей заявке и сохраняйте её в базу когда пользователь без авторизации её создаёт, зачем redis? Или вообще признак у заявки сделайте "Предварительная" и без привязки к пользователю её создавайте.
2. Далее после создания предварительной заявки, сохраняете идентификатор созданной предварительной заявки в сессию неавторизованного пользователя.
3. Как зарегестрировался пользователь, делаете из его предварительной заявки нормальную, её идентификатор будет в данных сессии пользователя.

Всё просто.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы