Mit diesem seltsamen Problem in Django konfrontiert, wo mein Obj.date_time-Objekt in IST Datetime-String konvertiert wird, wenn ich die Obj as-Funktion übergeben. Auch es geschieht mit wenigen Fällen nur auf der Grundlage von Protokollen.Django DateTime wird automatisch in IST-String konvertiert
#Actual Call
status_time_dict = {4: [orderObj.pickup_time,'dispatch_time'],
5: [orderObj.delivered_time,'delivery_time']}
statusVar = status_time_dict.get(int(orderObj.status), [timezone.now(),"Undefined"])
statusDate = buildDateString(statusVar[0],orderObj, date_format_type = 0,convert_to_ist = 0)
-----------------------------------------------------------------------
class Order(models.Model):
name = models.CharField(max_length=100, blank=True)
house_number = models.CharField(max_length=255)
contact_number = models.CharField(max_length=13)
order_date = models.DateField(db_index=True)
order_time = models.DateTimeField(db_index=True)
pickup_time = models.DateTimeField(null=True)
delivered_time = models.DateTimeField(null=True)
def get_order_time(self):
if self.order_time:
return str(self.order_time.replace(tzinfo=None) + datetime.timedelta(minutes=330))
else:
return "not available"
def get_pickup_time(self):
if self.pickup_time:
return str(self.pickup_time.replace(tzinfo=None) + datetime.timedelta(minutes=330))
else:
return "not available"
def get_delivered_time(self):
if self.delivered_time:
return str(self.delivered_time.replace(tzinfo=None) + datetime.timedelta(minutes=330))
else:
return "not available"
def utc_to_local(utc_dt):
local_tz = pytz.timezone('Asia/Kolkata')
local_dt = utc_dt.replace(tzinfo=pytz.utc).astimezone(local_tz)
return local_tz.normalize(local_dt)
def buildDateString(statusDate,Obj, date_format_type = 1,convert_to_ist = 1):
if statusDate is None:
statusDate = timezone.now()
elif type(statusDate) in [str, unicode]:
# **This is where it is failing, it should not have ben str or
# unicode as statusDate is being passed as OBJECT
# OBJ.DATE_TIME should never been a string but is happeing for few
# cases only and that too in Prod server only.**
failing_date = {"OID": Obj.id, "status_order": Obj.status, "failingDateString": statusDate,
'pickup_time': Obj.pickup_time, 'allot_time': Obj.allot_time, 'delivered_time': Obj.delivered_time}
print failing_date
try:
date_format = {True:"%Y-%m-%dT%H:%M:%S.%fZ", False:"%Y-%m-%d %H:%M:%S"}
format = date_format.get('Z' in statusDate,"Y-%m-%d %H:%M:%S")
statusDate = datetime.datetime.strptime(statusDate, format)
if date_format_type == 1:
return statusDate.strftime('%d-%m-%Y %H:%M:%S')
else:
return statusDate.strftime('%Y-%m-%d %H:%M:%S')
except ValueError:
statusDate = timezone.now()
if convert_to_ist ==1:
statusDate = utc_to_local(statusDate)
if date_format_type == 1:
statusDate = (statusDate).strftime('%d-%m-%Y %H:%M:%S')
else:
statusDate = (statusDate).strftime('%Y-%m-%d %H:%M:%S')
return statusDate
Plssee Kommentar in elif für weitere Informationen über den Fehler, was geschieht.
Auch in meinem models.py habe ich eine get_COLUMN_NAME-Funktion definiert, die zu IST-String führt, aber in diesem Kontext nicht aufgerufen wird. Ich bezweifle, ob das der Grund für das oben erwähnte seltsame Verhalten sein könnte
Was bedeutet es in Ihrem Fall "konvertiert zu IST"? Führe einen Debugger aus und finde einen Ort, an dem "Obj.date_time" "konvertiert" wird (bevor die Zeile 'print (repr (Obj.date_time))' ok ist, nach der Zeile "konvertiert"), dann erzeuge [mcve] , um das Problem ohne unnötigen Code zu demonstrieren – jfs