From 2ad1fce536ea7411c492ca39e8bdc873f4a7d3b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gregor=20M=C3=BCllegger?= Date: Sat, 18 May 2013 17:50:09 +0200 Subject: [PATCH] Adding first prototype of a List/Create API view. --- djadmin2/apiviews.py | 18 ++++++++++++++++++ djadmin2/core.py | 10 +++++----- djadmin2/models.py | 19 ++++++++++++++++++- 3 files changed, 41 insertions(+), 6 deletions(-) create mode 100644 djadmin2/apiviews.py diff --git a/djadmin2/apiviews.py b/djadmin2/apiviews.py new file mode 100644 index 0000000..14bd2ed --- /dev/null +++ b/djadmin2/apiviews.py @@ -0,0 +1,18 @@ +from rest_framework.fields import Field +from rest_framework.generics import ListCreateAPIView +from rest_framework.serializers import ModelSerializer + + +class Admin2APISerializer(ModelSerializer): + unicode = Field(source='__unicode__') + + +class ModelListCreateAPIView(ListCreateAPIView): + def get_serializer_class(self): + if self.serializer_class is None: + class ModelAPISerilizer(Admin2APISerializer): + class Meta: + model = self.model + + return ModelAPISerilizer + return super(ModelListCreateAPIView, self).get_serializer_class() diff --git a/djadmin2/core.py b/djadmin2/core.py index 8e2138c..8cf21c0 100644 --- a/djadmin2/core.py +++ b/djadmin2/core.py @@ -83,18 +83,18 @@ class Admin2(object): def get_urls(self): urlpatterns = patterns('', - url(r'^$', self.index_view.as_view(**self.get_index_kwargs()), name='dashboard'), + url(r'^$', self.index_view.as_view(), name='index'), ) for model, modeladmin in self.registry.iteritems(): - app_label = model._meta.app_label - model_name = model._meta.object_name.lower() - urlpatterns += patterns('', - url('^{}/{}/'.format(app_label, model_name), + url('^{}/{}/'.format(model._meta.app_label, model._meta.object_name.lower()), include(modeladmin.urls)), + url('^api/{}/{}/'.format(model._meta.app_label, model._meta.object_name.lower()), + include(modeladmin.api_urls)), ) return urlpatterns @property def urls(self): + # We set the application and instance namespace here return self.get_urls(), self.name, self.name diff --git a/djadmin2/models.py b/djadmin2/models.py index 60787d5..8f4d187 100644 --- a/djadmin2/models.py +++ b/djadmin2/models.py @@ -5,6 +5,8 @@ synonymous with the django.contrib.admin.sites model. """ +from djadmin2 import apiviews +from djadmin2 import views from django.core.urlresolvers import reverse from django.conf.urls import patterns, url @@ -108,6 +110,8 @@ class ModelAdmin2(BaseAdmin2): detail_view = views.ModelDetailView delete_view = views.ModelDeleteView + api_index_view = apiviews.ModelListCreateAPIView + def __init__(self, model, **kwargs): self.model = model self.app_label = model._meta.app_label @@ -184,11 +188,24 @@ class ModelAdmin2(BaseAdmin2): ), ) + def get_api_urls(self): + return patterns('', + url( + regex=r'^$', + view=self.api_index_view.as_view(model=self.model), + name='api-index' + ), + ) + @property def urls(self): - # We set the application and instance namespace here return self.get_urls(), None, None + @property + def api_urls(self): + return self.get_api_urls(), None, None + + def create_extra_permissions(app, created_models, verbosity, **kwargs): """ Creates 'view' permissions for all models.