2010-05-25 42 views
0

我有以下django代碼工作在sqlite數據庫,但由於某些未知的原因,我得到一個語法錯誤,如果我改變後端MySQL ... django的ORM治療過濾在MySQL中不同?正確Django的ORM語法,使此代碼在MySQL中工作

def wsjson(request,imei): 
wstations = WS.objects.annotate(latest_wslog_date=Max('wslog__date'),latest_wslog_time=Max('wslog__time')) 
logs = WSLog.objects.filter(date__in=[b.latest_wslog_date for b in wstations],time__in=[b.latest_wslog_time for b in wstations],imei__exact=imei) 
data = serializers.serialize('json',logs) 
return HttpResponse(data,'application/javascript') 

該代碼基本上從WSlog中獲取與WS中每個記錄對應的最新日誌,並將其序列化爲json。

模型被定義爲:

class WS(models.Model): 
    name = models.CharField(max_length=20) 
    imei = models.CharField(max_length=15) 
    description = models.TextField() 
    def __unicode__(self): 
     return self.name 

class WSLog(models.Model):              
    imei = models.CharField(max_length=15) 
    date = models.DateField() 
    time = models.TimeField() 
    data1 = models.DecimalField(max_digits=8,decimal_places=3)  
    data2 = models.DecimalField(max_digits=8,decimal_places=3) 
    WS = models.ForeignKey(WS) 
    def __unicode__(self): 
     return self.imei 
+0

你得到的錯誤是什麼? – 2010-05-25 16:09:39

+0

我剛剛重新檢查我的代碼和語法錯誤消失了,但是使用mysql我沒有從數據庫中得到任何東西(wsjson結果爲[]),但與sqlite工作正常 – gtujan 2010-05-25 16:26:13

回答

0

確定最終設法與代碼解決它下面

def wsjson(request,imei): 
    wstations = WS.objects.annotate(latest_wslog_date=Max('wslog__date'),latest_wslog_time=Max('wslog__time'))logs = WSLog.objects.filter(date__in=[a.latest_wslog_date for a in wstations],time__in=[b.latest_wslog_time for b in wstations],imei__exact=imei) 
    data = serializers.serialize('json',logs) 
    return HttpResponse(data,'application/javascript') 

怪異的一部分是原來的代碼工作像預期的那樣運行MySQL的Ubuntu的機器,但失敗了在Windows機器上(也運行MySql)