Рассмотрим следующий 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)
?
Есть ли способ получить правильное цитирование? – d33tah
Похоже что есть: http://stackoverflow.com/q/8112554/1091116 – d33tah