Сохранить прогресс или действия пользователя в django?
У меня есть серьезное задание, которое должно быть выполнено пользователями при регистрации! Как отследить это? На данный момент я проверяю, существуют ли данные более чем в 5 таблицах (например, адрес, образование и т.д.). Я думаю, что это не лучший способ сделать это! Поскольку когда пользователь входит в систему, мне нужно проверить, выполнил ли он все основные задачи, а затем позволить ему делать другие вещи...
Проведя исследование, у меня есть несколько вариантов:
Option1: Create a new model and store all progress on each row
and then fetch all the rows to check if required is completed.
Option2: Create a new model and store the finished actions in a array, for instace:
Class Actions:
owner = models.ForeignKey(User, on_delete=models.CASCADE)
actions = ArrayField(models.CharField(max_length=128))
And with these, i can append all the finished task one by one, like {emailverification,
personal_details,education_details} etc
And then use the above to work on the conditions
Я думаю, что второй вариант более эффективен, так как он просто берет одну строку из таблицы, а не берет несколько строк!
Или, пожалуйста, предложите какой-либо новый вариант для отслеживания этого!
добавьте json-поле в модель и сбрасывайте в него действия пользователя. плюс используйте "from django_extensions.db.fields.json import JSONField" вместо "models.JSONField", потому что он не очень хорошо работает с SQL
Action
- имя модели должно быть в единственном числе- Я бы использовал
BooleanField
в модели User, чтобы не делать другие селекты, если он уже закончил все шаги, и вы можете сделать просто:
if not request.user.finished_all_steps:
# select from Action and let him finish it
pass
и тогда все зависит от вас, хотите ли вы использовать Action.actions как JSONField
, или вы делаете строку для каждого действия