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

View file

@ -2,21 +2,43 @@
# Import your custom models # Import your custom models
from .models import Post, Comment from .models import Post, Comment
from django.contrib.auth.forms import UserCreationForm, UserChangeForm 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 import djadmin2
from djadmin2.models import ModelAdmin2 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): class UserAdmin2(ModelAdmin2):
create_form_class = UserCreationForm create_form_class = UserCreationForm
update_form_class = UserChangeForm update_form_class = UserChangeForm
api_serializer_class = UserSerializer
# Register each model with the admin # Register each model with the admin
djadmin2.default.register(Post) djadmin2.default.register(Post)
djadmin2.default.register(Comment) djadmin2.default.register(Comment)
djadmin2.default.register(User, UserAdmin2) djadmin2.default.register(User, UserAdmin2)
djadmin2.default.register(Permission) djadmin2.default.register(Group, GroupAdmin2)
djadmin2.default.register(Group)

View file

@ -1,2 +1,3 @@
from test_views import * from test_views import *
from test_apiviews 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)