2016-08-09 13 views
0

Ich nehme ein DateTimeField von einer API mit dem Format von "2016-08-09T02: 16: 15Z". Ich benutze den folgenden Code, um es zu parsen und es zu dem zu machen, was ich für ein Datum-Zeit-Feld hielt, bekomme aber einen Fehler von einer meiner Klassenmethoden, um die Zeit zu vergleichen. Bitte beachten Sie den Parsing-Code unten:ISO 8601 Feld zu Python DateTime Feld

time= dateutil.parser.parse(x['MatchTime']) #MatchTime is the ISO 8601 field 

Die Zeit scheint richtig zu ziehen, aber wenn ich es zu meinem Spiel-Modell hinzufügen, unten eingefügt, meine is_live Methode gibt mir einen Fehler

Spiel Modell:

class Game(models.Model): 
    time = models.DateTimeField(null=True, blank=True) 
    livePick = models.BooleanField(default=True) 

    def is_live(self): 
     now = timezone.now() 
     now.astimezone(timezone.utc).replace(tzinfo=None) 
     if now < self.time: 
      return True 
     else: 
      return False 

Dies ist der Fehler, den ich immer bin, wenn ich das Skript ausführen im Spiel mit der Zeit

line 34, in is_live 
if now < self.time: 
TypeError: unorderable types: datetime.datetime() < NoneType() 
hinzufügen

Update: Zeit ist mit den folgenden

zum Spiel Modell hinzugefügt
g = Game.objects.create(team1=team1, team2=team2) 
g.time = time 
g.save() 

Jede Hilfe wird sehr geschätzt. Vielen Dank!

Antwort

0

Dies ist der Fall, weil time in Ihrem Modell nullfähig ist und für die Modellinstanz, für die der Vergleich fehlschlägt, leer ist (None). Dies löst eine Ausnahme aus, wenn Sie versuchen, es mit einem datetime Objekt zu vergleichen.

Sie müssen für die Null Möglichkeit in Ihrer Logik berücksichtigen, zB ,:

if self.time is not None and now < self.time: 
    return True 
else: 
    return False 
+0

Ich versuche, das Feld, um sicherzustellen, mit diesem API-Aufruf nicht leer ist: Zeit = dateutil.parser.parse (x ['MatchTime']) - MatchTime ist ein Feld aus der API mit ISO 8601 Datumsdaten. Ich weiß, dass der Aufruf das ISO 8601-Datum in ein formatiertes Datum konvertiert, aber das Python liest es nicht eindeutig als ein dateTime-Feld. –

+0

Wie wird das Ergebnis dieser Funktion in die Modellinstanzvariable geschrieben? wird "time" definitiv in 'self.time' gespeichert? – solarissmoke

+0

Der obige Code wurde hinzugefügt, um zu zeigen, wie der API-Pull in meinem Spielmodell gespeichert wird. Bitte lassen Sie mich wissen, wenn Sie etwas anderes sehen möchten –