#python #django
#python #django
Вопрос:
Я пишу пользовательские команды управления в Django для непроверенных пользователей, где каждая новая учетная запись, срок действия которой превышает 24 часа без подтверждения электронной почты, затем помечается как is_deleted=true
, мой код выглядит следующим образом, но, однако, как я могу получить доступ к date_joined
каждой новой учетной записи?
User = get_user_model()
def handle(self, *args, **kwargs):
now = datetime.datetime.utcnow().replace(tzinfo=utc)
timediff = now - self.date_joined
if User.objects.filter(is_superuser=True):
pass
else:
if timediff.seconds / 3600 - 24 > 0:
for user in User.objects.filter(date_joined__gt=timediff, signup_confirmation=0):
user.is_deleted = True
user.save()
return True
return False
Ответ №1:
Попробуйте вот так. Я думаю, это из-за опечатки.
for user in User.objects.filter(date_joined__gte=timediff, signup_confirmation=0):
Ответ №2:
Не запускайте свой SQL в цикле for, это очень плохо, так как вы слишком часто обращаетесь к своей базе данных, и это замедляет работу БД. Вместо вашего цикла for просто используйте django bulk_update,
def handle(self, *args, **kwargs):
now = datetime.datetime.utcnow()
last_24_hours = now - datetime.timedelta(hours=24)
User.objects.filter(
date_joined__gte=last_24_hours,
signup_confirmation=0).update(is_deleted=True)
return True