правильный синтаксис Django ORM, чтобы этот код работал в MySQL - PullRequest
0 голосов
/ 25 мая 2010

У меня есть следующий код django, работающий с базой данных sqlite, но по какой-то неизвестной причине я получаю синтаксическую ошибку, если меняю бэкэнд на MySQL ... ORM django по-разному относится к фильтрации в 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

1 Ответ

0 голосов
/ 02 июня 2010

Хорошо, наконец-то удалось исправить это с кодом ниже

 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')

странной частью было то, что оригинальный код работал, как и ожидалось, на машине с Ubuntu под управлением MySql, но не работал на машине с Windows (также с MySql)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...