Как получить Tastypie для получения необработанного набора запросов sql? queryset = Foo.objects.raw(sql)
, похоже, не работает. Разве это невозможно?Tastypie & raw sql
ответ
Это похоже на работу:
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]
Вы можете попробовать переопределить обезвоживают функцию включить сырец синтаксиса SQL и или сделать каждого запроса Внесены изменения в QuerySet http://django-tastypie.readthedocs.org/en/latest/cookbook.html
лично я предпочел бы создать пользовательскую функцию просмотра в view.py, что соответствует любой ваш синтаксис REST для api - например/api/v1/rawsql, что-то вроде этого, чтобы ваши шаблоны были одинаковыми - вы просто управляете им по-другому.
queryset = super(class_name, self).get_query_set()
return queryset.whatever()
Не уверен, что вы подразумеваете под этим, но, вероятно, возможно создать менеджера и ввести сложный синтаксис 'WHERE' sql, используя' extra() '. Вероятно, это должно охватывать большинство случаев использования. –
Я попытался переопределить функцию get_query_set() и вернуть queryset.raw(), однако это вызывает у меня ошибку; Объект QuerySet не имеет атрибута 'raw'. – optimista
Это работает для меня: 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]
Вы были правы насчет дигидрата метода, спасибо. –