пятница, 18 ноября 2011 г.

Django: превращаем RawQuerySet в JSON-ответ


Всем хорош Djanfo-фреймворк. Да только вот ORM далеко не самый удобный. Хорошо еще что появилась возможность выполнять Raw-запросы. Например, у менеджера objects() есть метод raw(), с помощью которого можно сконструировать произвольный select.
Но радость от такой возможности омрачается тем, что у RawQuerySet, который получаем на выходе из raw() , нет привычных методов count(), values(), values_list() и тому подобных, так любезно предоставляемых нам классом QuerySet.
Я натолкнулся на это, когда мне потребовалось сформировать HTTP-ответ в формате JSON, содержащий результат довольно хитрой выборки из БД...В итоге список словарей пришлось конструировать вручную.

Примерно так это выглядит:

from django.core.serializers.json import DjangoJSONEncoder
from django.utils import simplejson

def sample_view(request):
    mymodels = MyModels.objects.raw("select * from myapp_mymodel")
    mlist = list()
    for m in mymodels:
        mlist.append(
         {'id': m.id,'title': m.title,'start': m.date,'end':m.date,}
    )
    data = simplejson.dumps(mlist, cls=DjangoJSONEncoder)
    return HttpResponse(data)

Комментариев нет:

Отправить комментарий

Если Вы нашли ошибку у автора, у Вас есть вопрос или просто хотите поделиться чем-то полезным, то пишите - не стесняйтесь..