Django Rest Framework using the url to load specified models
-
20-06-2021 - |
質問
Is it possible to use generic url settings to implement the django rest interface for all models in django?
So instead of per model configuration:
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)),
)
A more generic type of loading:
urlpatterns = patterns('',
url(r'^(?P<model>\w+)/$', GenericView.render_model_list()),
url(r'^(?P<model>\w+)/(?P<pk>[^/]+)/$', GenericView.render_model()),
)
With something that allows the system to generate the model and render it to the rest interface.
解決
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)),
)
in more general way the solution would look like this (sorry - i wrote it by hand), but you still need to import these models and form the model tuple by hand.
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)
所属していません StackOverflow