2013-02-10 1 views
1

Как получить Tastypie для получения необработанного набора запросов sql? queryset = Foo.objects.raw(sql), похоже, не работает. Разве это невозможно?Tastypie & raw sql

ответ

1

Это похоже на работу:

class BarResource(ModelResource): 

    class Meta: 
     queryset = Bar.objects.all() 

    def dehydrate(self, bundle): 
     qs = Bar.objects.raw('SELECT * FROM foo_bar') 
     return [row for row in qs] 
0

Вы можете попробовать переопределить обезвоживают функцию включить сырец синтаксиса SQL и или сделать каждого запроса Внесены изменения в QuerySet http://django-tastypie.readthedocs.org/en/latest/cookbook.html

лично я предпочел бы создать пользовательскую функцию просмотра в view.py, что соответствует любой ваш синтаксис REST для api - например/api/v1/rawsql, что-то вроде этого, чтобы ваши шаблоны были одинаковыми - вы просто управляете им по-другому.

+0

Вы были правы насчет дигидрата метода, спасибо. –

1
queryset = super(class_name, self).get_query_set() 
return queryset.whatever() 
+0

Не уверен, что вы подразумеваете под этим, но, вероятно, возможно создать менеджера и ввести сложный синтаксис 'WHERE' sql, используя' extra() '. Вероятно, это должно охватывать большинство случаев использования. –

+0

Я попытался переопределить функцию get_query_set() и вернуть queryset.raw(), однако это вызывает у меня ошибку; Объект QuerySet не имеет атрибута 'raw'. – optimista

0

Это работает для меня: D

class UsersResource(ModelResource): 
    class Meta: 
     resource_name = "users" 
     queryset  = User.objects.all() 
     allowed_methods = ['get'] 

    def obj_get_list(self, bundle, **kwargs): 
     query = """ 
     SELECT 
      id, name 
     FROM 
      users 
     ORDER BY name"""   
     qs = User.objects.raw(query) 
     return [row for row in qs]