增加了组内可见的公告,编辑了对应的 models 和 js
This commit is contained in:
26
announcement/migrations/0002_auto_20150818_1445.py
Normal file
26
announcement/migrations/0002_auto_20150818_1445.py
Normal file
@@ -0,0 +1,26 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import models, migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('group', '0004_merge'),
|
||||
('announcement', '0001_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='announcement',
|
||||
name='groups',
|
||||
field=models.ManyToManyField(to='group.Group'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='announcement',
|
||||
name='is_global',
|
||||
field=models.BooleanField(default=True),
|
||||
preserve_default=False,
|
||||
),
|
||||
]
|
||||
@@ -2,6 +2,7 @@
|
||||
from django.db import models
|
||||
|
||||
from account.models import User
|
||||
from group.models import Group
|
||||
|
||||
|
||||
class Announcement(models.Model):
|
||||
@@ -17,6 +18,9 @@ class Announcement(models.Model):
|
||||
last_update_time = models.DateTimeField(auto_now=True)
|
||||
# 是否可见 false的话相当于删除
|
||||
visible = models.BooleanField(default=True)
|
||||
# 公告可见范围 0是全局可见 1是部分小组可见,需要在下面的字段中存储可见的小组
|
||||
is_global = models.BooleanField()
|
||||
groups = models.ManyToManyField(Group)
|
||||
|
||||
class Meta:
|
||||
db_table = "announcement"
|
||||
|
||||
@@ -8,6 +8,8 @@ from .models import Announcement
|
||||
class CreateAnnouncementSerializer(serializers.Serializer):
|
||||
title = serializers.CharField(max_length=50)
|
||||
content = serializers.CharField(max_length=10000)
|
||||
is_global = serializers.BooleanField()
|
||||
groups = serializers.ListField(child=serializers.IntegerField(), allow_empty=True)
|
||||
|
||||
|
||||
class AnnouncementSerializer(serializers.ModelSerializer):
|
||||
@@ -28,3 +30,5 @@ class EditAnnouncementSerializer(serializers.Serializer):
|
||||
title = serializers.CharField(max_length=50)
|
||||
content = serializers.CharField(max_length=10000)
|
||||
visible = serializers.BooleanField()
|
||||
is_global = serializers.BooleanField()
|
||||
groups = serializers.ListField(child=serializers.IntegerField())
|
||||
|
||||
@@ -5,6 +5,8 @@ from django.shortcuts import render
|
||||
from utils.shortcuts import serializer_invalid_response, error_response, success_response
|
||||
|
||||
from utils.shortcuts import paginate, error_page
|
||||
from account.models import SUPER_ADMIN, ADMIN
|
||||
from group.models import Group
|
||||
from .models import Announcement
|
||||
from .serializers import (CreateAnnouncementSerializer, AnnouncementSerializer,
|
||||
EditAnnouncementSerializer)
|
||||
@@ -28,9 +30,26 @@ class AnnouncementAdminAPIView(APIView):
|
||||
serializer = CreateAnnouncementSerializer(data=request.data)
|
||||
if serializer.is_valid():
|
||||
data = serializer.data
|
||||
Announcement.objects.create(title=data["title"],
|
||||
content=data["content"],
|
||||
created_by=request.user)
|
||||
groups = []
|
||||
# 如果不是全局公告,就去查询一下小组的id 列表中的内容,注意用户身份
|
||||
if not data["is_global"]:
|
||||
if request.user.admin_type == SUPER_ADMIN:
|
||||
groups = Group.objects.filter(id__in=data["groups"])
|
||||
else:
|
||||
groups = Group.objects.filter(id__in=data["groups"], admin=request.user)
|
||||
if not groups.count():
|
||||
return error_response(u"至少选择一个小组")
|
||||
else:
|
||||
if request.user.admin_type != SUPER_ADMIN:
|
||||
return error_response(u"只有超级管理员可以创建全局公告")
|
||||
|
||||
announcement = Announcement.objects.create(title=data["title"],
|
||||
content=data["content"],
|
||||
created_by=request.user,
|
||||
is_global=data["is_global"])
|
||||
|
||||
announcement.groups.add(*groups)
|
||||
|
||||
return success_response(u"公告发布成功!")
|
||||
else:
|
||||
return serializer_invalid_response(serializer)
|
||||
@@ -46,26 +65,43 @@ class AnnouncementAdminAPIView(APIView):
|
||||
if serializer.is_valid():
|
||||
data = serializer.data
|
||||
try:
|
||||
announcement = Announcement.objects.get(id=data["id"])
|
||||
if request.user.admin_type == SUPER_ADMIN:
|
||||
announcement = Announcement.objects.get(id=data["id"])
|
||||
else:
|
||||
announcement = Announcement.objects.get(id=data["id"], admin=request.user)
|
||||
except Announcement.DoesNotExist:
|
||||
return error_response(u"该公告不存在!")
|
||||
return error_response(u"公告不存在")
|
||||
groups = []
|
||||
if not data["is_global"]:
|
||||
if request.user.admin_type == SUPER_ADMIN:
|
||||
groups = Group.objects.filter(id__in=data["groups"])
|
||||
else:
|
||||
groups = Group.objects.filter(id__in=data["groups"], admin=request.user)
|
||||
if not groups.count():
|
||||
return error_response(u"至少选择一个小组")
|
||||
announcement.title = data["title"]
|
||||
announcement.content = data["content"]
|
||||
announcement.visible = data["visible"]
|
||||
announcement.is_global = data["is_global"]
|
||||
announcement.save()
|
||||
|
||||
# 重建小组和公告的对应关系
|
||||
announcement.groups.clear()
|
||||
announcement.groups.add(*groups)
|
||||
return success_response(AnnouncementSerializer(announcement).data)
|
||||
else:
|
||||
return serializer_invalid_response(serializer)
|
||||
|
||||
|
||||
class AnnouncementAPIView(APIView):
|
||||
def get(self, request):
|
||||
"""
|
||||
公告分页json api接口
|
||||
---
|
||||
response_serializer: AnnouncementSerializer
|
||||
"""
|
||||
announcement = Announcement.objects.all().order_by("-last_update_time")
|
||||
if request.user.admin_type == SUPER_ADMIN:
|
||||
announcement = Announcement.objects.all().order_by("-last_update_time")
|
||||
else:
|
||||
announcement = Announcement.objects.filter(admin=request.user)
|
||||
visible = request.GET.get("visible", None)
|
||||
if visible:
|
||||
announcement = announcement.filter(visible=(visible == "true"))
|
||||
|
||||
Reference in New Issue
Block a user