2012-07-10 48 views
1

是否可以使用通用url設置來實現django中所有模型的django rest界面?使用url加載指定模型的Django Rest Framework

所以不是每個型號的配置:

urlpatterns = patterns('', 
    url(r'^(?P<model>\w+)/$', GenericView.render_model_list()), 
    url(r'^(?P<model>\w+)/(?P<pk>[^/]+)/$', GenericView.render_model()), 
) 

的東西,可以讓系統生成的模型,並將其呈現到其他接口:

class BlogResource(ModelResource): 
    model = Blog 

urlpatterns = patterns('', 
    url(r'^Blog/$', ListOrCreateModelView.as_view(resource=BlogResource)), 
    url(r'^Blog/(?P<pk>[^/]+)/$', InstanceModelView.as_view(resource=BlogResource)), 
) 

更通用型負載。

回答

1
class BlogResource(ModelResource): 
    model = Blog 

urlpatterns = patterns('', 
    url(r'^Blog/$', ListOrCreateModelView.as_view(resource=BlogResource)), 
    url(r'^Blog/(?P<pk>[^/]+)/$', InstanceModelView.as_view(resource=BlogResource)), 
) 

在更一般的方式解決是這樣的(對不起 - 我用手工寫的),但你仍需要進口這些模型,並形成由手工模型元組。

from django.conf.urls.defaults import patterns, url 
from models import Model1, Model2, Model3 

urlconf = ['', ] 

for obj in (Model1, Model2, Model3): 
    name = obj.__class__.__name__ 
    ResourceClass = type('%sResource' % name, (obj,), { 
     'model': obj, 
    }) 
    urlconf.append(url(r'^%s/$' % name, ListOrCreateModelView.as_view(resource=ResourceClass))) 
    urlconf.append(url(r'^%s/(?P<pk>[^/]+)/$' % name, ListOrCreateModelView.as_view(resource=ResourceClass))) 
urlpatterns = patterns(urlconf) 
相關問題