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