2012-07-10 49 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) 
相关问题