@Mikkkch

Как ограничить количество созданных объектов пользователем в день?

Здравствуйте, в своем проекте я хочу реализовать для пользователей некоторые ограничения, заключающиеся в том, чтобы пользователь не мог добавить больше определенного количества объектов в день. Нужно еще сделать так, чтобы помимо дневного ограничения между созданием объектов стоял временной интервал в какое-либо количество часов.

Я предполагаю, что можно модели пользователя добавить численный атрибут, который будет уменьшаться с созданием новых объектов, но нужно еще, чтобы этот счетчик автоматически обновлялся каждые 24 часа.
Еще момент, что если пользователь в день опубликует один объект, то у него останется еще два, а из этого следует, что при возобновлении счетчика на следующий день у него будет уже 5 записей. Этот момент тоже нужно учесть.

Помогите, пожалуйста, с идеями реализации.
  • Вопрос задан
  • 274 просмотра
Решения вопроса 2
fox_12
@fox_12 Куратор тега Django
Расставляю биты, управляю заряженными частицами
Я предполагаю, что можно модели пользователя добавить численный атрибут, который будет уменьшаться с созданием новых объектов, но нужно еще, чтобы этот счетчик автоматически обновлялся каждые 24 часа.
Еще момент, что если пользователь в день опубликует один объект, то у него останется еще два, а из этого следует, что при возобновлении счетчика на следующий день у него будет уже 5 записей. Этот момент тоже нужно учесть.


Слишком сложно... Лучше как-то так:
if SomeModel.objects.filter(
    author=request.user,
    timestamp__gte=timezone.now()-datetime.timedelta(days=1),
).count() < LIMIT:
     # allow create 
else:
    # decline create

Просто в объекте модели сохраняйте автора создавшего модель и временную метку. И просто смотрите сколько в определенный период он создал объектов.
Ответ написан
Комментировать
@deliro
1. Смотришь в БД на последний объект, созданный этим пользователем. Он должен быть создан не раньше, чем X часов назад, либо не существует ни одного объекта — Model.objects.filter(user_id=...).latest('created_at')
2. Смотришь в БД на объекты, которые созданы сегодня. Их должно быть меньше Y — Model.objects.filter(user_id=..., created_at__date=date.today()).count()

Если оба условия выполняются — даёшь создать объект. В чём сложность?
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы