У меня странная проблема при попытке отсеивания будущих дат из конечной точки API приложения.У меня есть следующие турниры с одним турниром, перечисленным через час (турнир 8):
У меня есть следующая модель:
class Tournament(models.Model):
name = models.CharField(max_length=250)
start_time = models.DateTimeField(auto_now=False)
active = models.BooleanField(default=True)
def __str__(self):
return self.name
У меня есть следующее представление:
def get_current_tournaments(request, player_id):
registration_queryset = TournamentRegistration.objects.filter(player=player_id)
active_tournaments = []
for registration in registration_queryset:
tournament = registration.tournament
if tournament.active:
utc=pytz.UTC
start_time = tournament.start_time.replace(tzinfo=utc)
if start_time > datetime.now(start_time.tzinfo):
active_tournaments.append(tournament.pk)
print(active_tournaments)
return JsonResponse({'tournament_ids': active_tournaments})
Каждый раз, когда я вызываю представление get_current_tournamnents()
, я получаю список ВСЕХ турниров, на которые зарегистрирован игрок, в том числе в будущем (турнир8 в будущем).Я ожидал, что if start_time > datetime.now(start_time.tzinfo):
будет отсеивать будущее время и включать только текущие в данный момент турниры, то есть турниры, которые уже начались (время начала - в прошлом).
HTTP GET /tournaments/current-tournaments/1/ 200 [0.02, 127.0.0.1:55555]
[2, 1, 4, 6, 5, 7, 8]
Этот список выше включает турнир 8, которыйнаходится в будущем на данный момент.
Теперь, когда я изменяю эту строку на if start_time < datetime.now(start_time.tzinfo):
, поэтому, если start_time меньше, чем сейчас, он выводит на экран все турниры, и я получаю пустой список, когда я ожидал, чтотолько получить турнир в будущем.Я запутался в том, что я делаю неправильно, и не очень разбираюсь в особенностях datetime.