Код Python, не отображающий будущие даты при сравнении даты и времени - PullRequest
0 голосов
/ 23 сентября 2019

У меня странная проблема при попытке отсеивания будущих дат из конечной точки API приложения.У меня есть следующие турниры с одним турниром, перечисленным через час (турнир 8):

enter image description here

У меня есть следующая модель:

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.

...