2013-02-10 79 views

回答

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語法和或使每個請求改建爲查詢集http://django-tastypie.readthedocs.org/en/latest/cookbook.html

我個人寧願創建view.py自定義視圖功能匹配任何你的api REST語法是 - 例如/ api/v1/rawsql類似的東西,以保持你的模式相同 - 你只是以不同的方式進行管理。

+0

你是對的脫水方法,謝謝。 – 2013-02-11 21:43:33

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

不確定你的意思,但可能創建一個管理器並使用'extra()'注入複雜的'WHERE' sql語法。這應該可能涵蓋大多數使用情況。 – 2013-02-10 11:48:36

+0

我試着重寫get_query_set()管理器函數並返回queryset.raw(),但它拋出一個錯誤; 'QuerySet'對象沒有'raw'屬性。 – optimista 2013-03-03 11:32:41

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]