سؤال

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)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top