2015-04-16 3 views
0

Рассмотрим следующий urls.py - для краткости, я решил поставить в пример в одном файле:Джанго Пользовательский поиск работы другого SQL запросов, чем это отображающее ул (запрос)

from django.conf.urls import patterns, include, url 

from django.http import HttpResponse 
from django.db import models 

def x(request): 
    class A(models.Model): 
     title = models.CharField(max_length=1024) 
    class RightAnchored(models.Lookup): 
     lookup_name = 'rightanchored' 

     def as_sql(self, compiler, connection): 
      lhs, lhs_params = self.process_lhs(compiler, connection) 
      rhs, rhs_params = self.process_rhs(compiler, connection) 
      params = lhs_params + rhs_params 
      return "REVERSE(%s) LIKE REVERSE(%s)" % (lhs, rhs), params 

    models.CharField.register_lookup(RightAnchored) 
    q = A.objects.filter(title__rightanchored='%b') 
    return HttpResponse(str(q.query)) 

urlpatterns = patterns('', 
    url(r'^$', x), 
) 

По какой-то причине, посещение http://localhost:8000 дает me: SELECT "w_a"."id", "w_a"."title" FROM "w_a" WHERE REVERSE("w_a"."title") LIKE REVERSE(%b), во время выполнения команды вы получите SELECT "w_a"."id", "w_a"."title" FROM "w_a" WHERE REVERSE("w_a"."title") LIKE REVERSE('%b') (обратите внимание на дополнительные '' внутри LIKE REVERSE). Это означает, что отображаемый запрос отличается от отображаемого запроса. Как я могу заставить свой Lookup вести себя правильно, когда вызывается str(q.query)?

ответ

2

str(qs.query) не делает правильного цитирования на всех бэкэндах. Это связано с тем, что кавычки обрабатываются драйвером базы данных, а некоторые драйверы не предоставляют доступ к цитируемой строке запроса.

Итак, словом, все работает правильно.

+0

Есть ли способ получить правильное цитирование? – d33tah

+0

Похоже что есть: http://stackoverflow.com/q/8112554/1091116 – d33tah