From bb58750d69cfaa9d77f18282ff79879a346ff6bf Mon Sep 17 00:00:00 2001 From: Chif Gergo <chifgeri97@gmail.com> Date: Wed, 24 Jan 2018 20:11:26 +0100 Subject: [PATCH] Multiple choice modified motivation field added --- .../migrations/0008_auto_20180124_1821.py | 22 +++++++++++++ .../migrations/0009_profile_motivation.py | 20 +++++++++++ .../migrations/0010_auto_20180124_1929.py | 33 +++++++++++++++++++ src/account/models.py | 31 ++++++++--------- src/account/serializers.py | 6 ++-- src/account/urls.py | 2 +- src/account/views.py | 15 +++++++-- 7 files changed, 106 insertions(+), 23 deletions(-) create mode 100644 src/account/migrations/0008_auto_20180124_1821.py create mode 100644 src/account/migrations/0009_profile_motivation.py create mode 100644 src/account/migrations/0010_auto_20180124_1929.py diff --git a/src/account/migrations/0008_auto_20180124_1821.py b/src/account/migrations/0008_auto_20180124_1821.py new file mode 100644 index 0000000..fd3af44 --- /dev/null +++ b/src/account/migrations/0008_auto_20180124_1821.py @@ -0,0 +1,22 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.5 on 2018-01-24 17:21 +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 = [ + ('account', '0007_auto_20180123_1723'), + ] + + operations = [ + migrations.AlterField( + model_name='profile', + name='user', + field=models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='profile', to=settings.AUTH_USER_MODEL), + ), + ] diff --git a/src/account/migrations/0009_profile_motivation.py b/src/account/migrations/0009_profile_motivation.py new file mode 100644 index 0000000..c9d1e0a --- /dev/null +++ b/src/account/migrations/0009_profile_motivation.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.5 on 2018-01-24 17:43 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('account', '0008_auto_20180124_1821'), + ] + + operations = [ + migrations.AddField( + model_name='profile', + name='motivation', + field=models.TextField(null=True), + ), + ] diff --git a/src/account/migrations/0010_auto_20180124_1929.py b/src/account/migrations/0010_auto_20180124_1929.py new file mode 100644 index 0000000..2a9b50d --- /dev/null +++ b/src/account/migrations/0010_auto_20180124_1929.py @@ -0,0 +1,33 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.5 on 2018-01-24 18:29 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('account', '0009_profile_motivation'), + ] + + operations = [ + migrations.AddField( + model_name='profile', + name='groups', + field=models.ManyToManyField(related_name='profiles', to='account.GroupChoice'), + ), + migrations.AlterField( + model_name='groupchoice', + name='choice', + field=models.CharField(choices=[('DT', 'DevTeam'), ('NET', 'NeTeam'), ('ST', 'SecurITeam'), ('SYS', 'SysAdmin'), ('HAT', 'Hallgatói Tudásbázis'), ('N', 'None')], default='N', max_length=10, unique=True), + ), + migrations.AlterUniqueTogether( + name='groupchoice', + unique_together=set([]), + ), + migrations.RemoveField( + model_name='groupchoice', + name='profile', + ), + ] diff --git a/src/account/models.py b/src/account/models.py index 5ccda4b..9c9f682 100644 --- a/src/account/models.py +++ b/src/account/models.py @@ -2,18 +2,6 @@ from django.db import models from django.contrib.auth.models import User -class Profile(models.Model): - join_date = models.DateField(auto_now=True) - user = models.OneToOneField(User, on_delete=models.CASCADE) - - nick = models.CharField(max_length=15, blank=True, null=True) - signed = models.BooleanField(default=False, null=False) - # Homeworks=models.ForeignKey(Homework) - - def __str__(self): - return self.user.username - - class GroupChoice(models.Model): TEAMS = ( ('DT', 'DevTeam'), @@ -23,11 +11,20 @@ class GroupChoice(models.Model): ('HAT', 'Hallgatói Tudásbázis'), ('N', 'None'), ) - choice = models.CharField(max_length=10, choices=TEAMS, default='None') - profile = models.ForeignKey(Profile, related_name="preferd_groups", on_delete=models.CASCADE) - - class Meta: - unique_together = ('choice', 'profile') + choice = models.CharField(max_length=10, choices=TEAMS, default='N', unique=True) def __str__(self): return self.choice + + +class Profile(models.Model): + join_date = models.DateField(auto_now=True) + user = models.OneToOneField(User, related_name='profile', on_delete=models.CASCADE) + motivation = models.TextField(null=True) + nick = models.CharField(max_length=15, blank=True, null=True) + signed = models.BooleanField(default=False, null=False) + groups = models.ManyToManyField(GroupChoice, related_name='profiles') + # Homeworks=models.ForeignKey(Homework) + + def __str__(self): + return self.user.username diff --git a/src/account/serializers.py b/src/account/serializers.py index 2725ff6..92a0828 100644 --- a/src/account/serializers.py +++ b/src/account/serializers.py @@ -5,12 +5,12 @@ from account import models class ChoiceSerializer(serializers.ModelSerializer): class Meta: model = models.GroupChoice - fields = ('choice', ) + fields = ('choice', 'profile') class ProfileSerializer(serializers.ModelSerializer): - preferd_groups = serializers.SlugRelatedField(slug_field='choice', many=True, queryset=models.GroupChoice.objects.all()) + groups = serializers.SlugRelatedField(many=True, slug_field="choice", queryset=models.GroupChoice.objects.all()) class Meta: model = models.Profile - fields = ('join_date', 'user', 'nick', 'signed', 'preferd_groups') + fields = ('id', 'join_date', 'user', 'nick', 'motivation', 'signed', 'groups') diff --git a/src/account/urls.py b/src/account/urls.py index ff11797..ebf85f3 100644 --- a/src/account/urls.py +++ b/src/account/urls.py @@ -3,5 +3,5 @@ from . import views router = routers.DefaultRouter() -router.register(r'^profiles', views.ProfileViewSet) +router.register(r'profiles', views.ProfileViewSet, base_name='profile') urlpatterns = router.urls diff --git a/src/account/views.py b/src/account/views.py index 05197b5..58c4050 100644 --- a/src/account/views.py +++ b/src/account/views.py @@ -1,5 +1,7 @@ from rest_framework import viewsets from rest_framework import permissions +from rest_framework.response import Response +from rest_framework.decorators import list_route from . import models from . import serializers @@ -7,5 +9,14 @@ from . import serializers class ProfileViewSet(viewsets.ModelViewSet): serializer_class = serializers.ProfileSerializer - queryset = models.Profile.objects.all() - permission_classes = [permissions.IsAuthenticated, ] + permission_classes = (permissions.IsAuthenticated, ) + + def get_queryset(self): + user = self.request.user + if user.has_perm(permissions.IsAdminUser): + return models.Profile.objects.all() + + @list_route(methods=['get']) + def me(self, request): + serializer = self.serializer_class(request.user.profile) + return Response(serializer.data) -- GitLab