Skip to content
Snippets Groups Projects
Commit e0a49273 authored by Bodor Máté's avatar Bodor Máté
Browse files

update views & solution serializer

parent bb1bf58a
No related branches found
No related tags found
No related merge requests found
# -*- coding: utf-8 -*-
# Generated by Django 1.11.5 on 2018-02-04 11:09
from __future__ import unicode_literals
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('homework', '0003_auto_20180124_1818'),
]
operations = [
migrations.AlterField(
model_name='solution',
name='created_by',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL),
),
]
# -*- coding: utf-8 -*-
# Generated by Django 1.11.5 on 2018-02-04 14:25
from __future__ import unicode_literals
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('homework', '0004_auto_20180204_1209'),
]
operations = [
migrations.RenameField(
model_name='solution',
old_name='date',
new_name='alma',
),
]
# -*- coding: utf-8 -*-
# Generated by Django 1.11.5 on 2018-02-04 15:01
from __future__ import unicode_literals
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('homework', '0005_auto_20180204_1525'),
]
operations = [
migrations.RenameField(
model_name='solution',
old_name='alma',
new_name='date',
),
]
...@@ -34,9 +34,19 @@ class IsStaffOrReadOnlyForAuthenticated(BasePermission): ...@@ -34,9 +34,19 @@ class IsStaffOrReadOnlyForAuthenticated(BasePermission):
The request is authenticated as a staff, or is a read-only request for authenticated. The request is authenticated as a staff, or is a read-only request for authenticated.
""" """
def has_object_permission(self, request, view): def has_permission(self, request, view):
return ( return (
request.user.is_staff or request.user.is_staff or
request.method in SAFE_METHODS and request.method in SAFE_METHODS and
request.user.is_authenticated request.user.is_authenticated
) )
class IsStaffUser(BasePermission):
"""
The request is authenticated as a staff
"""
def has_permission(self, request, view):
return request.user.is_staff
...@@ -15,4 +15,13 @@ class SolutionSerializer(serializers.ModelSerializer): ...@@ -15,4 +15,13 @@ class SolutionSerializer(serializers.ModelSerializer):
model = models.Solution model = models.Solution
read_only_fields = ('created_by', 'date' 'ready') read_only_fields = ('created_by', 'date' 'ready')
extra_kwargs = {'created_by': {'default': serializers.CurrentUserDefault()}} extra_kwargs = {'created_by': {'default': serializers.CurrentUserDefault()}}
fields = '__all__' fields = ('task', 'date', 'accepted', 'files', 'created_by')
def validate(self, attrs):
task = attrs['task']
date = attrs['date']
if task.deadline < date:
raise serializers.ValidationError("You cannot submit homework after the deadline")
return attrs
...@@ -2,7 +2,7 @@ from rest_framework import routers ...@@ -2,7 +2,7 @@ from rest_framework import routers
from . import views from . import views
router = routers.DefaultRouter() router = routers.DefaultRouter()
router.register(r'tasks', views.TasksViewSet) router.register(r'tasks', views.TasksViewSet, base_name='tasks')
router.register(r'solutions', views.SolutionViewSet) router.register(r'solutions', views.SolutionsViewSet, base_name='solutions')
urlpatterns = router.urls urlpatterns = router.urls
from rest_framework import viewsets from rest_framework import viewsets
from rest_framework.response import Response
from rest_framework import status
from rest_framework.decorators import list_route
from django.http import Http404
from django.shortcuts import get_object_or_404
from . import serializers from . import serializers
from . import models from . import models
from . import permissions from . import permissions
from rest_framework.response import Response
from rest_framework import status
class TasksViewSet(viewsets.ModelViewSet): class TasksViewSet(viewsets.ModelViewSet):
...@@ -14,7 +16,7 @@ class TasksViewSet(viewsets.ModelViewSet): ...@@ -14,7 +16,7 @@ class TasksViewSet(viewsets.ModelViewSet):
permission_classes = (permissions.IsStaffOrReadOnlyForAuthenticated, ) permission_classes = (permissions.IsStaffOrReadOnlyForAuthenticated, )
class SolutionViewSet(viewsets.ModelViewSet): class SolutionsViewSet(viewsets.ModelViewSet):
serializer_class = serializers.SolutionSerializer serializer_class = serializers.SolutionSerializer
queryset = models.Solution.objects.all() queryset = models.Solution.objects.all()
permission_classes = (permissions.IsStaffOrReadOnlyForAuthenticated, ) permission_classes = (permissions.IsStaffOrReadOnlyForAuthenticated, )
...@@ -22,7 +24,21 @@ class SolutionViewSet(viewsets.ModelViewSet): ...@@ -22,7 +24,21 @@ class SolutionViewSet(viewsets.ModelViewSet):
def create(self, request, *args, **kwargs): def create(self, request, *args, **kwargs):
serializer = self.get_serializer(data=request.data) serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True) serializer.is_valid(raise_exception=True)
serializer.validated_data['accepted'] = False # serializer.validated_data['accepted'] = False
self.perform_create(serializer) # task_id = serializer.validated_data.get('task')
# date = serializer.validated_data['date']
# task = get_object_or_404(models.Task, pk=task_id)
if task_id.deadline < date:
return Http404("Deadline")
headers = self.get_success_headers(serializer.data) headers = self.get_success_headers(serializer.data)
return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers) return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)
def get_queryset(self):
user = self.request.user
if user.has_perm(permissions.IsStaffUser):
return models.Solution.objects.all()
@list_route(methods=['get'])
def me(self, request):
serializer = self.serializer_class(request.user.profile) #request ?
return Response(serializer.data)
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment