как получить доступ к столбцу date_joined из каждой новой учетной записи из команд управления?

#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