2016-12-21 5 views
-1

Ich habe Felder in meiner Django-App live_from und live_to diese Felder sind nicht erforderlich. Wenn diese Felder leer sind ich in meinem metod einen Fehler:TypeError: nicht korrigierbare Typen: NoneType() <= datetime.datetime()

Felder:

live_from = models.DateTimeField('live from', blank=True, null=True) 

live_to = models.DateTimeField('live to', blank=True, null=True) 

hier ist meine Methode:

def is_live(self): 
    return (self.live_from <= timezone.now()) and (self.live_to >= timezone.now()) 

Bug: TypeError: unorderable types: NoneType() <= datetime.datetime()

+0

Sieht weniger wie ein Codierungsfehler und eher wie ein Entwurfsfehler aus. Wenn diese Felder leer sind, was soll 'is_live' tun? – TigerhawkT3

+0

Also entweder 'live_from' oder' live_to' ist None, weil du Nullen erlaubst. Die Ausnahme besagt, dass "life_from" hier "None" ist, das gleiche gilt für "live_to". Was soll passieren, wenn einer von diesen leer ist? –

Antwort

2

Ich glaube, Sie versuchen, Vergleichen Sie NonType mit der aktuellen Zeit, Sie sollten False zurückgeben, wenn der Wert zuerst leer ist, zum Beispiel:

def is_live(self): 
    if self.live_from is None or self.live_to is None : 
     return False 
    return (self.live_from <= timezone.now()) and (self.live_to >= timezone.now()) 
+0

Arbeiten, danke :) –

1

Dies wäre eine gute Definition, Ihr Modell gegeben.

def is_live(self): 
    # first, check the inexpensive precondition, before comparing date fields 
    return ((None not in [self.live_from, self.live_to]) and 
      self.live_from <= timezone.now() and self.live_to >= timezone.now()) 
Verwandte Themen