Merge pull request #102 from gregmuellegger/rest-api

Rest api fixes
This commit is contained in:
Daniel Greenfeld 2013-05-19 07:28:01 -07:00
commit 657aead2bf
4 changed files with 67 additions and 11 deletions

View file

@ -108,6 +108,9 @@ class ModelAdmin2(BaseAdmin2):
detail_view = views.ModelDetailView
delete_view = views.ModelDeleteView
# API configuration
api_serializer_class = None
# API Views
api_list_view = apiviews.ListCreateAPIView
api_detail_view = apiviews.RetrieveUpdateDestroyAPIView
@ -131,6 +134,13 @@ class ModelAdmin2(BaseAdmin2):
'modeladmin': self,
}
def get_default_api_view_kwargs(self):
kwargs = self.get_default_view_kwargs()
kwargs.update({
'serializer_class': self.api_serializer_class,
})
return kwargs
def get_prefixed_view_name(self, view_name):
return '{}_{}_{}'.format(self.app_label, self.model_name, view_name)
@ -157,24 +167,18 @@ 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')))
def get_api_list_kwargs(self):
kwargs = self.get_default_view_kwargs()
kwargs = self.get_default_api_view_kwargs()
kwargs.update({
'paginate_by': self.list_per_page,
})
return kwargs
def get_api_detail_kwargs(self):
return self.get_default_view_kwargs()
return self.get_default_api_view_kwargs()
def get_urls(self):
return patterns('',

View file

@ -2,21 +2,43 @@
# Import your custom models
from .models import Post, Comment
from django.contrib.auth.forms import UserCreationForm, UserChangeForm
from django.contrib.auth.models import Group, Permission, User
from django.contrib.auth.models import Group, User
from rest_framework.relations import PrimaryKeyRelatedField
import djadmin2
from djadmin2.models import ModelAdmin2
from djadmin2.apiviews import Admin2APISerializer
class GroupSerializer(Admin2APISerializer):
permissions = PrimaryKeyRelatedField(many=True)
class Meta:
model = Group
class GroupAdmin2(ModelAdmin2):
api_serializer_class = GroupSerializer
class UserSerializer(Admin2APISerializer):
user_permissions = PrimaryKeyRelatedField(many=True)
class Meta:
model = User
exclude = ('passwords',)
class UserAdmin2(ModelAdmin2):
create_form_class = UserCreationForm
update_form_class = UserChangeForm
api_serializer_class = UserSerializer
# Register each model with the admin
djadmin2.default.register(Post)
djadmin2.default.register(Comment)
djadmin2.default.register(User, UserAdmin2)
djadmin2.default.register(Permission)
djadmin2.default.register(Group)
djadmin2.default.register(Group, GroupAdmin2)

View file

@ -1,2 +1,3 @@
from test_views import *
from test_apiviews import *
from test_builtin_api_resources import *

View file

@ -0,0 +1,29 @@
from django.contrib.auth.models import Group, User
from django.core.urlresolvers import reverse
from django.test import TestCase
class UserAPITest(TestCase):
def test_list_response_ok(self):
response = self.client.get(reverse('admin2:auth_user_api-list'))
self.assertEqual(response.status_code, 200)
def test_detail_response_ok(self):
user = User.objects.create_user(
username='Foo',
password='bar')
response = self.client.get(
reverse('admin2:auth_user_api-detail', args=(user.pk,)))
self.assertEqual(response.status_code, 200)
class GroupAPITest(TestCase):
def test_list_response_ok(self):
response = self.client.get(reverse('admin2:auth_group_api-list'))
self.assertEqual(response.status_code, 200)
def test_detail_response_ok(self):
group = Group.objects.create(name='group')
response = self.client.get(
reverse('admin2:auth_group_api-detail', args=(group.pk,)))
self.assertEqual(response.status_code, 200)