From 49f007601fda3610282c796273adf73460ccff29 Mon Sep 17 00:00:00 2001 From: "xiaokong1937@gmail.com" <763691951@qq.com> Date: Mon, 26 Sep 2016 21:22:48 +0800 Subject: [PATCH] add user-list-delete support for user-group detail page --- apps/users/api.py | 25 ++++++++++--- apps/users/models.py | 11 ++++-- .../templates/users/user_group_detail.html | 37 ++++++++++++++++++- apps/users/urls.py | 2 + 4 files changed, 64 insertions(+), 11 deletions(-) diff --git a/apps/users/api.py b/apps/users/api.py index 6fb1fe7c5..d557d7d1b 100644 --- a/apps/users/api.py +++ b/apps/users/api.py @@ -3,7 +3,10 @@ import logging -from rest_framework import generics +from django.shortcuts import get_object_or_404 + +from rest_framework import generics, status +from rest_framework.response import Response from rest_framework_bulk import ListBulkCreateUpdateDestroyAPIView from .serializers import UserSerializer, UserGroupSerializer, UserAttributeSerializer, UserGroupEditSerializer, \ @@ -27,11 +30,6 @@ class UserDetailDeleteUpdateApi(generics.RetrieveUpdateDestroyAPIView): print(self.request.data) return super(UserDetailDeleteUpdateApi, self).delete(request, *args, **kwargs) - # def get(self, request, *args, **kwargs): - # print("hello world") - # print(request.user) - # return super(UserDetailDeleteUpdateApi, self).get(request, *args, **kwargs) - class UserGroupListAddApi(generics.ListCreateAPIView): queryset = UserGroup.objects.all() @@ -111,3 +109,18 @@ class UserBulkUpdateApi(ListBulkCreateUpdateDestroyAPIView): if isinstance(ids, list): queryset = queryset.filter(id__in=ids) return queryset + + +class DeleteUserFromGroupApi(generics.DestroyAPIView): + queryset = UserGroup.objects.all() + serializer_class = GroupEditSerializer + + def destroy(self, request, *args, **kwargs): + group = self.get_object() + self.perform_destroy(group, **kwargs) + return Response(status=status.HTTP_204_NO_CONTENT) + + def perform_destroy(self, instance, **kwargs): + user_id = kwargs.get('uid') + user = get_object_or_404(User, id=user_id) + instance.users.remove(user) diff --git a/apps/users/models.py b/apps/users/models.py index b6d40dfb3..229b70ed8 100644 --- a/apps/users/models.py +++ b/apps/users/models.py @@ -4,14 +4,14 @@ from __future__ import unicode_literals from django.conf import settings from django.contrib.auth.hashers import make_password -from django.utils import timezone -from django.db import models from django.contrib.auth.models import AbstractUser +from django.core import signing +from django.db import models, IntegrityError from django.db.models.signals import post_save from django.dispatch import receiver -from django.db import IntegrityError from django.utils.translation import ugettext_lazy as _ -from django.core import signing +from django.utils import timezone +from django.shortcuts import reverse from rest_framework.authtoken.models import Token @@ -102,6 +102,9 @@ class User(AbstractUser): def password_raw(self, password_raw_): self.set_password(password_raw_) + def get_absolute_url(self): + return reverse('users:user-detail', args=(self.id,)) + @property def is_expired(self): if self.date_expired > timezone.now(): diff --git a/apps/users/templates/users/user_group_detail.html b/apps/users/templates/users/user_group_detail.html index 5c6fb6639..3b78a61c5 100644 --- a/apps/users/templates/users/user_group_detail.html +++ b/apps/users/templates/users/user_group_detail.html @@ -7,6 +7,18 @@ + {% endblock %} {% block content %}
@@ -46,9 +58,17 @@ {{ object.comment }} - {% trans 'Created at:' %}: + {% trans 'Created at' %}: {{ object.date_created }} + + {% trans 'Users' %}: + + {% for user in object.users.all %} + {{ user.name }} + {% endfor %} + +
@@ -109,3 +129,18 @@ {% endblock %} +{% block custom_foot_js %} + +{% endblock %} diff --git a/apps/users/urls.py b/apps/users/urls.py index ca9673956..21915a6df 100644 --- a/apps/users/urls.py +++ b/apps/users/urls.py @@ -46,6 +46,8 @@ urlpatterns += [ url(r'^v1/user-groups$', api.UserGroupListAddApi.as_view(), name='user-group-list-api'), url(r'^v1/user-groups/(?P[0-9]+)$', api.UserGroupDetailDeleteUpdateApi.as_view(), name='user-group-detail-api'), + url(r'^v1/user-groups/group/(?P\d+)/user/(?P\d+)/$', + api.DeleteUserFromGroupApi.as_view(), name='delete-user-from-group-api'), url(r'^v1/user-groups/(?P[0-9]+)/edit$', api.UserGroupEditApi.as_view(), name='user-group-edit-api'), url(r'^v1/user-groups/(?P[0-9]+)/delete/$', api.GroupDeleteApi.as_view(),