Фильтр объектов на основе даты истечения срока действия токена и даты_присоединения пользователя с помощью Q и "gt" Django
Я хочу удалить пользователей, которые не активировали свои учетные записи, когда срок действия токена активации истек, токен активации истекает через 30 минут.
from django.db.models.functions import Now
def delete_unactivated_users():
User = get_user_model()
expiry = User.date_joined + timedelta(seconds=1800)
unactivated_users = User.objects.filter(Q(Now()__gt=expiry) & (Q(is_active = False)))
for user in unactivated_users:
user.delete()
print('<<<User Deleted>>>')
user.save
Я получаю синтаксическую ошибку в строке 5 кода, я пытался использовать
unactivated_users = User.objects.filter(Q(expiry__lt=Now()) & (Q(is_active=False)))
, но это не привело к тому же значению. Похоже, что проблема заключается в размещении Now()
и expiry
в строке 5
Не видя вашей полной ошибки, я не могу быть уверенным, но определенно есть несколько вещей, которые не так:
Вам не нужно сохранять пользователя после его удаления (на самом деле вы не сможете этого сделать, так как он не будет существовать) - вы также можете удалить весь список сразу.
Вам не нужно Q
Импортируемый вами Now
некорректен
Это должно работать:
from django.utils.timezone import now
def delete_unactivated_users(expiry_time):
User = get_user_model()
expiry = User.date_joined + timedelta(seconds=1800)
unactivated_users = User.objects.filter(expiry__lt=now(), is_active = False)
unactivated_users.delete()
Как я понял, вы хотите удалить неактивных пользователей, а точнее тех, у которых есть is_active=False
и date_joined + 30 minutes is less than Now()
. Если это так, то вот как вы можете это сделать.
from django.utils import timezone
def delete_inactive_users():
User = get_user_model()
inactive_users = User.objects.filter(
date_joined__lt=timezone.now() - timezone.timedelta(seconds=1800),
is_active=False,
)
# you can delete all the records by once
inactive_users.delete()