Adding first prototype of a List/Create API view.

This commit is contained in:
Gregor Müllegger 2013-05-18 17:50:09 +02:00
parent bea20a11c1
commit 2ad1fce536
3 changed files with 41 additions and 6 deletions

18
djadmin2/apiviews.py Normal file
View file

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

View file

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

View file

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