From a9b9ae7f767ed03f3b3a0bf27eb32f07809b59fd Mon Sep 17 00:00:00 2001 From: virusdefender <1670873886@qq.com> Date: Sun, 9 Aug 2015 19:06:55 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=BA=86=E5=8A=A0=E5=85=A5?= =?UTF-8?q?=E5=B0=8F=E7=BB=84=E7=9A=84=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- group/migrations/0001_initial.py | 18 +++++++++++++++- group/models.py | 11 +++++++++- group/serializers.py | 2 +- group/views.py | 35 ++++++++++++++++++++++++++++++-- 4 files changed, 61 insertions(+), 5 deletions(-) diff --git a/group/migrations/0001_initial.py b/group/migrations/0001_initial.py index f996a63..68da3ae 100644 --- a/group/migrations/0001_initial.py +++ b/group/migrations/0001_initial.py @@ -22,7 +22,6 @@ class Migration(migrations.Migration): ('join_group_setting', models.IntegerField()), ('visible', models.BooleanField(default=True)), ('admin', models.ForeignKey(related_name='my_groups', to=settings.AUTH_USER_MODEL)), - ('members', models.ManyToManyField(to=settings.AUTH_USER_MODEL)), ], options={ 'db_table': 'group', @@ -42,4 +41,21 @@ class Migration(migrations.Migration): 'db_table': 'join_group_request', }, ), + migrations.CreateModel( + name='UserGroupRelation', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('join_time', models.DateTimeField(auto_now_add=True)), + ('group', models.ForeignKey(to='group.Group')), + ('user', models.ForeignKey(to=settings.AUTH_USER_MODEL)), + ], + options={ + 'db_table': 'user_group_relation', + }, + ), + migrations.AddField( + model_name='group', + name='members', + field=models.ManyToManyField(to=settings.AUTH_USER_MODEL, through='group.UserGroupRelation'), + ), ] diff --git a/group/models.py b/group/models.py index aa255f4..0508dc0 100644 --- a/group/models.py +++ b/group/models.py @@ -11,7 +11,7 @@ class Group(models.Model): admin = models.ForeignKey(User, related_name="my_groups") # 0是公开 1是需要申请后加入 2是不允许任何人加入 join_group_setting = models.IntegerField() - members = models.ManyToManyField(User) + members = models.ManyToManyField(User, through="UserGroupRelation") # 解散小组后,这一项改为False visible = models.BooleanField(default=True) @@ -19,6 +19,15 @@ class Group(models.Model): db_table = "group" +class UserGroupRelation(models.Model): + group = models.ForeignKey(Group) + user = models.ForeignKey(User) + join_time = models.DateTimeField(auto_now_add=True) + + class Meta: + db_table = "user_group_relation" + + class JoinGroupRequest(models.Model): group = models.ForeignKey(User) user = models.ForeignKey(User, related_name="my_join_group_requests") diff --git a/group/serializers.py b/group/serializers.py index bd655ed..3bc88d4 100644 --- a/group/serializers.py +++ b/group/serializers.py @@ -24,4 +24,4 @@ class JoinGroupRequestSerializer(serializers.Serializer): class GroupSerializer(serializers.ModelSerializer): class Meta: model = Group - exclude = ["members"] \ No newline at end of file + exclude = ["members"] diff --git a/group/views.py b/group/views.py index 5ccdcd9..65499f1 100644 --- a/group/views.py +++ b/group/views.py @@ -5,8 +5,9 @@ from rest_framework.views import APIView from utils.shortcuts import error_response, serializer_invalid_response, success_response, paginate from account.models import REGULAR_USER, ADMIN, SUPER_ADMIN +from account.decorators import login_required -from .models import Group, JoinGroupRequest +from .models import Group, JoinGroupRequest, UserGroupRelation from .serializers import (CreateGroupSerializer, EditGroupSerializer, JoinGroupRequestSerializer, GroupSerializer) @@ -53,6 +54,8 @@ class GroupAdminAPIView(APIView): def get(self, request): """ 查询小组列表或者单个小组的信息 + --- + response_serializer: GroupSerializer """ group_id = request.GET.get("group_id", None) if group_id: @@ -69,4 +72,32 @@ class GroupAdminAPIView(APIView): groups = Group.objects.filter(visible=True) else: groups = Group.objects.filter(admin=request.user, visible=True) - return paginate(request, groups, GroupSerializer) \ No newline at end of file + return paginate(request, groups, GroupSerializer) + + +def join_group(user, group): + return UserGroupRelation.objects.create(user=user, group=group) + + +class JoinGroupAPIView(APIView): + @login_required + def post(self, request): + serializer = JoinGroupRequestSerializer(data=request.data) + if serializer.is_valid(): + data = serializer.data + try: + group = Grouo.objects.get(id=data["group"]) + except Group.DesoNotExist: + return error_response(u"小组不存在") + if group.join_group_setting == 0: + join_group(request.user, group) + return success_response(u"你已经成功的加入该小组") + elif group.join_group_setting == 1: + return success_response(u"申请提交成功,请等待审核") + elif group.join_group_setting == 2: + return error_response(u"该小组不允许任何人加入") + else: + return serializer_invalid_response(serializer) + + def get(self, request): + pass \ No newline at end of file