Adding a detail based view.

This commit is contained in:
Gregor Müllegger 2013-05-18 18:28:26 +02:00
parent bfc61eadcb
commit 9db48cf0d9
2 changed files with 27 additions and 7 deletions

View file

@ -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

View file

@ -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<pk>[0-9]+)/$',
view=self.api_detail_view.as_view(**self.get_api_detail_kwargs()),
name='api-detail'
),
)
@property