import the namespace with the models
This commit is contained in:
parent
e7559446a7
commit
7965ecf779
6 changed files with 72 additions and 81 deletions
|
@ -6,64 +6,63 @@ The admin is the admin page configuration, describing which model should be visi
|
|||
|
||||
from django.contrib import admin
|
||||
|
||||
from .models import (Department, StudentGroup, TeachingUnit, StudentCard, TeachingSession, Attendance, Absence,
|
||||
AbsenceAttachment, User)
|
||||
from . import models
|
||||
|
||||
|
||||
# Register your models here.
|
||||
@admin.register(User)
|
||||
@admin.register(models.User)
|
||||
class AdminUser(admin.ModelAdmin):
|
||||
list_display = ("id", "username", "email", "first_name", "last_name", "is_staff")
|
||||
search_fields = ("id", "username", "email", "first_name", "last_name", "is_staff")
|
||||
list_filter = ("is_staff",)
|
||||
|
||||
|
||||
@admin.register(Department)
|
||||
@admin.register(models.Department)
|
||||
class AdminDepartment(admin.ModelAdmin):
|
||||
list_display = ("id", "name", "email")
|
||||
search_fields = ("id", "name", "email")
|
||||
|
||||
|
||||
@admin.register(StudentGroup)
|
||||
@admin.register(models.StudentGroup)
|
||||
class AdminStudentGroup(admin.ModelAdmin):
|
||||
list_display = ("id", "name", "owner", "department")
|
||||
search_fields = ("id", "name", "owner", "department")
|
||||
|
||||
|
||||
@admin.register(TeachingUnit)
|
||||
@admin.register(models.TeachingUnit)
|
||||
class AdminTeachingUnit(admin.ModelAdmin):
|
||||
list_display = ("id", "name")
|
||||
search_fields = ("id", "name")
|
||||
|
||||
|
||||
@admin.register(StudentCard)
|
||||
@admin.register(models.StudentCard)
|
||||
class AdminStudentCard(admin.ModelAdmin):
|
||||
list_display = ("id", "uid", "owner")
|
||||
search_fields = ("id", "uid", "owner")
|
||||
readonly_fields = ("uid",)
|
||||
|
||||
|
||||
@admin.register(TeachingSession)
|
||||
@admin.register(models.TeachingSession)
|
||||
class AdminTeachingSession(admin.ModelAdmin):
|
||||
list_display = ("id", "start", "end", "duration", "teacher")
|
||||
search_fields = ("id", "start", "end", "duration", "teacher")
|
||||
list_filter = ("start", "duration")
|
||||
|
||||
|
||||
@admin.register(Attendance)
|
||||
@admin.register(models.Attendance)
|
||||
class AdminAttendance(admin.ModelAdmin):
|
||||
list_display = ("id", "date", "student")
|
||||
search_fields = ("id", "date", "student")
|
||||
list_filter = ("date",)
|
||||
|
||||
|
||||
@admin.register(Absence)
|
||||
@admin.register(models.Absence)
|
||||
class AdminAbsence(admin.ModelAdmin):
|
||||
list_display = ("id", "message", "student")
|
||||
search_fields = ("id", "message", "student")
|
||||
|
||||
|
||||
@admin.register(AbsenceAttachment)
|
||||
@admin.register(models.AbsenceAttachment)
|
||||
class AdminAbsenceAttachment(admin.ModelAdmin):
|
||||
list_display = ("id", "content", "absence")
|
||||
search_fields = ("id", "content", "absence")
|
||||
|
|
|
@ -6,26 +6,25 @@ A permission describe which user is allowed to see and modify which objet with t
|
|||
|
||||
from rest_framework import permissions
|
||||
|
||||
from Palto.Palto.models import (Department, TeachingUnit, StudentCard, StudentGroup, User, TeachingSession, Attendance,
|
||||
Absence, AbsenceAttachment)
|
||||
from Palto.Palto import models
|
||||
|
||||
|
||||
class UserPermission(permissions.BasePermission):
|
||||
def has_object_permission(self, request, view, obj: User) -> bool:
|
||||
def has_object_permission(self, request, view, obj: models.User) -> bool:
|
||||
# if the requesting user is admin, allow all
|
||||
if request.user.is_superuser:
|
||||
return True
|
||||
|
||||
if request.method in permissions.SAFE_METHODS:
|
||||
# if the user is in one of the same department as the requesting user, allow read
|
||||
if obj in Department.multiple_related_users(request.user.related_departments):
|
||||
if obj in models.Department.multiple_related_users(request.user.related_departments):
|
||||
return True
|
||||
|
||||
return False
|
||||
|
||||
|
||||
class DepartmentPermission(permissions.BasePermission):
|
||||
def has_object_permission(self, request, view, obj: Department) -> bool:
|
||||
def has_object_permission(self, request, view, obj: models.Department) -> bool:
|
||||
# if the requesting user is admin, allow all
|
||||
if request.user.is_superuser:
|
||||
return True
|
||||
|
@ -42,7 +41,7 @@ class DepartmentPermission(permissions.BasePermission):
|
|||
|
||||
|
||||
class StudentGroupPermission(permissions.BasePermission):
|
||||
def has_object_permission(self, request, view, obj: StudentGroup) -> bool:
|
||||
def has_object_permission(self, request, view, obj: models.StudentGroup) -> bool:
|
||||
# if the requesting user is admin, allow all
|
||||
if request.user.is_superuser:
|
||||
return True
|
||||
|
@ -68,7 +67,7 @@ class StudentGroupPermission(permissions.BasePermission):
|
|||
|
||||
|
||||
class TeachingUnitPermission(permissions.BasePermission):
|
||||
def has_object_permission(self, request, view, obj: TeachingUnit) -> bool:
|
||||
def has_object_permission(self, request, view, obj: models.TeachingUnit) -> bool:
|
||||
# if the requesting user is admin, allow all
|
||||
if request.user.is_superuser:
|
||||
return True
|
||||
|
@ -90,7 +89,7 @@ class TeachingUnitPermission(permissions.BasePermission):
|
|||
|
||||
|
||||
class StudentCardPermission(permissions.BasePermission):
|
||||
def has_object_permission(self, request, view, obj: StudentCard) -> bool:
|
||||
def has_object_permission(self, request, view, obj: models.StudentCard) -> bool:
|
||||
# if the requesting user is admin, allow all
|
||||
if request.user.is_superuser:
|
||||
return True
|
||||
|
@ -108,7 +107,7 @@ class StudentCardPermission(permissions.BasePermission):
|
|||
|
||||
|
||||
class TeachingSessionPermission(permissions.BasePermission):
|
||||
def has_object_permission(self, request, view, obj: TeachingSession) -> bool:
|
||||
def has_object_permission(self, request, view, obj: models.TeachingSession) -> bool:
|
||||
# if the requesting user is admin, allow all
|
||||
if request.user.is_superuser:
|
||||
return True
|
||||
|
@ -134,7 +133,7 @@ class TeachingSessionPermission(permissions.BasePermission):
|
|||
|
||||
|
||||
class AttendancePermission(permissions.BasePermission):
|
||||
def has_object_permission(self, request, view, obj: Attendance) -> bool:
|
||||
def has_object_permission(self, request, view, obj: models.Attendance) -> bool:
|
||||
# if the requesting user is admin, allow all
|
||||
if request.user.is_superuser:
|
||||
return True
|
||||
|
@ -160,7 +159,7 @@ class AttendancePermission(permissions.BasePermission):
|
|||
|
||||
|
||||
class AbsencePermission(permissions.BasePermission):
|
||||
def has_object_permission(self, request, view, obj: Absence) -> bool:
|
||||
def has_object_permission(self, request, view, obj: models.Absence) -> bool:
|
||||
# if the requesting user is admin, allow all
|
||||
if request.user.is_superuser:
|
||||
return True
|
||||
|
@ -186,7 +185,7 @@ class AbsencePermission(permissions.BasePermission):
|
|||
|
||||
|
||||
class AbsenceAttachmentPermission(permissions.BasePermission):
|
||||
def has_object_permission(self, request, view, obj: AbsenceAttachment) -> bool:
|
||||
def has_object_permission(self, request, view, obj: models.AbsenceAttachment) -> bool:
|
||||
# if the requesting user is admin, allow all
|
||||
if request.user.is_superuser:
|
||||
return True
|
||||
|
|
|
@ -6,8 +6,7 @@ A serializers tell the API how should a model should be serialized to be used by
|
|||
|
||||
from rest_framework import serializers
|
||||
|
||||
from Palto.Palto.models import (User, Department, TeachingUnit, StudentCard, TeachingSession, Attendance, Absence,
|
||||
AbsenceAttachment, StudentGroup)
|
||||
from Palto.Palto import models
|
||||
|
||||
|
||||
# TODO(Raphaël): Voir pour les related_name
|
||||
|
@ -15,56 +14,56 @@ from Palto.Palto.models import (User, Department, TeachingUnit, StudentCard, Tea
|
|||
|
||||
class UserSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = User
|
||||
model = models.User
|
||||
fields = ['id', 'username', 'first_name', 'last_name', 'email']
|
||||
|
||||
|
||||
class DepartmentSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = Department
|
||||
model = models.Department
|
||||
fields = ['id', 'name', 'email', 'managers']
|
||||
# NOTE: teachers, students
|
||||
|
||||
|
||||
class StudentGroupSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = StudentGroup
|
||||
model = models.StudentGroup
|
||||
fields = ['id', 'name', 'owner', 'department']
|
||||
# NOTE: students
|
||||
|
||||
|
||||
class TeachingUnitSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = TeachingUnit
|
||||
model = models.TeachingUnit
|
||||
fields = ['id', 'name', 'department']
|
||||
# NOTE: managers, teachers, student_groups
|
||||
|
||||
|
||||
class StudentCardSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = StudentCard
|
||||
model = models.StudentCard
|
||||
fields = ['id', 'uid', 'department', 'owner']
|
||||
|
||||
|
||||
class TeachingSessionSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = TeachingSession
|
||||
model = models.TeachingSession
|
||||
fields = ['id', 'start', 'duration', 'note', 'unit', 'group', 'teacher']
|
||||
|
||||
|
||||
class AttendanceSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = Attendance
|
||||
model = models.Attendance
|
||||
fields = ['id', 'date', 'student', 'session']
|
||||
|
||||
|
||||
class AbsenceSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = Absence
|
||||
model = models.Absence
|
||||
fields = ['id', 'message', 'student', 'session']
|
||||
|
||||
|
||||
class AbsenceAttachmentSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = AbsenceAttachment
|
||||
model = models.AbsenceAttachment
|
||||
fields = ['id', 'content', 'absence']
|
||||
|
|
|
@ -6,7 +6,7 @@ Everything to test the API v1 is described here.
|
|||
|
||||
from django import test
|
||||
|
||||
from Palto.Palto.models import User
|
||||
from Palto.Palto import models
|
||||
|
||||
|
||||
class UserTestCase(test.TestCase):
|
||||
|
|
|
@ -7,20 +7,19 @@ All the urls for every model of the API are described here.
|
|||
|
||||
from rest_framework import routers
|
||||
|
||||
from .views import (UserViewSet, AbsenceAttachmentViewSet, AbsenceViewSet, AttendanceViewSet, TeachingSessionViewSet,
|
||||
StudentCardViewSet, TeachingUnitViewSet, StudentGroupViewSet, DepartmentViewSet)
|
||||
from . import views
|
||||
|
||||
router = routers.DefaultRouter()
|
||||
|
||||
router.register(r'users', UserViewSet, basename="User")
|
||||
router.register(r'departments', DepartmentViewSet, basename="Department")
|
||||
router.register(r'student_groups', StudentGroupViewSet, basename="StudentGroup")
|
||||
router.register(r'teaching_units', TeachingUnitViewSet, basename="TeachingUnit")
|
||||
router.register(r'student_cards', StudentCardViewSet, basename="StudentCard")
|
||||
router.register(r'teaching_sessions', TeachingSessionViewSet, basename="TeachingSession")
|
||||
router.register(r'attendances', AttendanceViewSet, basename="Attendance")
|
||||
router.register(r'absences', AbsenceViewSet, basename="Absence")
|
||||
router.register(r'absence_attachments', AbsenceAttachmentViewSet, basename="AbsenceAttachment")
|
||||
router.register(r'users', views.UserViewSet, basename="User")
|
||||
router.register(r'departments', views.DepartmentViewSet, basename="Department")
|
||||
router.register(r'student_groups', views.StudentGroupViewSet, basename="StudentGroup")
|
||||
router.register(r'teaching_units', views.TeachingUnitViewSet, basename="TeachingUnit")
|
||||
router.register(r'student_cards', views.StudentCardViewSet, basename="StudentCard")
|
||||
router.register(r'teaching_sessions', views.TeachingSessionViewSet, basename="TeachingSession")
|
||||
router.register(r'attendances', views.AttendanceViewSet, basename="Attendance")
|
||||
router.register(r'absences', views.AbsenceViewSet, basename="Absence")
|
||||
router.register(r'absence_attachments', views.AbsenceAttachmentViewSet, basename="AbsenceAttachment")
|
||||
|
||||
|
||||
urlpatterns = router.urls
|
||||
|
|
|
@ -7,65 +7,60 @@ An API view describe which models should display which files to user with which
|
|||
from rest_framework import viewsets
|
||||
from rest_framework.permissions import IsAuthenticated
|
||||
|
||||
from .permissions import (UserPermission, DepartmentPermission, StudentGroupPermission, TeachingUnitPermission,
|
||||
StudentCardPermission, TeachingSessionPermission, AttendancePermission, AbsencePermission,
|
||||
AbsenceAttachmentPermission)
|
||||
from .serializers import (UserSerializer, AbsenceAttachmentSerializer, AbsenceSerializer, AttendanceSerializer,
|
||||
TeachingSessionSerializer, StudentCardSerializer, StudentGroupSerializer,
|
||||
DepartmentSerializer, TeachingUnitSerializer)
|
||||
from ...models import (User, AbsenceAttachment, Absence, Attendance, TeachingSession, StudentCard, TeachingUnit,
|
||||
StudentGroup, Department)
|
||||
from . import permissions
|
||||
from . import serializers
|
||||
from ... import models
|
||||
|
||||
|
||||
class UserViewSet(viewsets.ModelViewSet):
|
||||
serializer_class = UserSerializer
|
||||
queryset = User.objects.all()
|
||||
permission_classes = [IsAuthenticated, UserPermission]
|
||||
serializer_class = serializers.UserSerializer
|
||||
queryset = models.User.objects.all()
|
||||
permission_classes = [IsAuthenticated, permissions.UserPermission]
|
||||
|
||||
|
||||
class DepartmentViewSet(UserViewSet):
|
||||
serializer_class = DepartmentSerializer
|
||||
queryset = Department.objects.all()
|
||||
permission_classes = [DepartmentPermission]
|
||||
serializer_class = serializers.DepartmentSerializer
|
||||
queryset = models.Department.objects.all()
|
||||
permission_classes = [permissions.DepartmentPermission]
|
||||
|
||||
|
||||
class StudentGroupViewSet(UserViewSet):
|
||||
serializer_class = StudentGroupSerializer
|
||||
queryset = StudentGroup.objects.all()
|
||||
permission_classes = [IsAuthenticated, StudentGroupPermission]
|
||||
serializer_class = serializers.StudentGroupSerializer
|
||||
queryset = models.StudentGroup.objects.all()
|
||||
permission_classes = [IsAuthenticated, permissions.StudentGroupPermission]
|
||||
|
||||
|
||||
class TeachingUnitViewSet(UserViewSet):
|
||||
serializer_class = TeachingUnitSerializer
|
||||
queryset = TeachingUnit.objects.all()
|
||||
permission_classes = [IsAuthenticated, TeachingUnitPermission]
|
||||
serializer_class = serializers.TeachingUnitSerializer
|
||||
queryset = models.TeachingUnit.objects.all()
|
||||
permission_classes = [IsAuthenticated, permissions.TeachingUnitPermission]
|
||||
|
||||
|
||||
class StudentCardViewSet(UserViewSet):
|
||||
serializer_class = StudentCardSerializer
|
||||
queryset = StudentCard.objects.all()
|
||||
permission_classes = [IsAuthenticated, StudentCardPermission]
|
||||
serializer_class = serializers.StudentCardSerializer
|
||||
queryset = models.StudentCard.objects.all()
|
||||
permission_classes = [IsAuthenticated, permissions.StudentCardPermission]
|
||||
|
||||
|
||||
class TeachingSessionViewSet(UserViewSet):
|
||||
serializer_class = TeachingSessionSerializer
|
||||
queryset = TeachingSession.objects.all()
|
||||
permission_classes = [IsAuthenticated, TeachingSessionPermission]
|
||||
serializer_class = serializers.TeachingSessionSerializer
|
||||
queryset = models.TeachingSession.objects.all()
|
||||
permission_classes = [IsAuthenticated, permissions.TeachingSessionPermission]
|
||||
|
||||
|
||||
class AttendanceViewSet(UserViewSet):
|
||||
serializer_class = AttendanceSerializer
|
||||
queryset = Attendance.objects.all()
|
||||
permission_classes = [IsAuthenticated, AttendancePermission]
|
||||
serializer_class = serializers.AttendanceSerializer
|
||||
queryset = models.Attendance.objects.all()
|
||||
permission_classes = [IsAuthenticated, permissions.AttendancePermission]
|
||||
|
||||
|
||||
class AbsenceViewSet(UserViewSet):
|
||||
serializer_class = AbsenceSerializer
|
||||
queryset = Absence.objects.all()
|
||||
permission_classes = [IsAuthenticated, AbsencePermission]
|
||||
serializer_class = serializers.AbsenceSerializer
|
||||
queryset = models.Absence.objects.all()
|
||||
permission_classes = [IsAuthenticated, permissions.AbsencePermission]
|
||||
|
||||
|
||||
class AbsenceAttachmentViewSet(UserViewSet):
|
||||
serializer_class = AbsenceAttachmentSerializer
|
||||
queryset = AbsenceAttachment.objects.all()
|
||||
permission_classes = [IsAuthenticated, AbsenceAttachmentPermission]
|
||||
serializer_class = serializers.AbsenceAttachmentSerializer
|
||||
queryset = models.AbsenceAttachment.objects.all()
|
||||
permission_classes = [IsAuthenticated, permissions.AbsenceAttachmentPermission]
|
||||
|
|
Loading…
Reference in a new issue