From 9db48cf0d9088cad09cf60e42db054e6d9ef14a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gregor=20M=C3=BCllegger?= Date: Sat, 18 May 2013 18:28:26 +0200 Subject: [PATCH] Adding a detail based view. --- djadmin2/apiviews.py | 20 ++++++++++++++------ djadmin2/models.py | 14 +++++++++++++- 2 files changed, 27 insertions(+), 7 deletions(-) diff --git a/djadmin2/apiviews.py b/djadmin2/apiviews.py index 14bd2ed..52df071 100644 --- a/djadmin2/apiviews.py +++ b/djadmin2/apiviews.py @@ -1,13 +1,13 @@ -from rest_framework.fields import Field -from rest_framework.generics import ListCreateAPIView -from rest_framework.serializers import ModelSerializer +from rest_framework import fields, generics, serializers -class Admin2APISerializer(ModelSerializer): - unicode = Field(source='__unicode__') +class Admin2APISerializer(serializers.ModelSerializer): + unicode = fields.Field(source='__unicode__') -class ModelListCreateAPIView(ListCreateAPIView): +class Admin2APIMixin(object): + modeladmin = None + def get_serializer_class(self): if self.serializer_class is None: class ModelAPISerilizer(Admin2APISerializer): @@ -16,3 +16,11 @@ class ModelListCreateAPIView(ListCreateAPIView): return ModelAPISerilizer return super(ModelListCreateAPIView, self).get_serializer_class() + + +class ModelListCreateAPIView(Admin2APIMixin, generics.ListCreateAPIView): + pass + + +class ModelRetrieveUpdateDestroyAPIView(Admin2APIMixin, generics.RetrieveUpdateDestroyAPIView): + pass diff --git a/djadmin2/models.py b/djadmin2/models.py index 8f4d187..fcf96af 100644 --- a/djadmin2/models.py +++ b/djadmin2/models.py @@ -111,6 +111,7 @@ class ModelAdmin2(BaseAdmin2): delete_view = views.ModelDeleteView api_index_view = apiviews.ModelListCreateAPIView + api_detail_view = apiviews.ModelRetrieveUpdateDestroyAPIView def __init__(self, model, **kwargs): self.model = model @@ -156,6 +157,12 @@ class ModelAdmin2(BaseAdmin2): def get_delete_kwargs(self): return self.get_default_view_kwargs() + def get_api_index_kwargs(self): + return self.get_default_view_kwargs() + + def get_api_detail_kwargs(self): + return self.get_default_view_kwargs() + def get_index_url(self): return reverse('admin2:{}'.format(self.get_prefixed_view_name('index'))) @@ -192,9 +199,14 @@ class ModelAdmin2(BaseAdmin2): return patterns('', url( regex=r'^$', - view=self.api_index_view.as_view(model=self.model), + view=self.api_index_view.as_view(**self.get_api_index_kwargs()), name='api-index' ), + url( + regex=r'^(?P[0-9]+)/$', + view=self.api_detail_view.as_view(**self.get_api_detail_kwargs()), + name='api-detail' + ), ) @property