Expand user model to store perks
This commit is contained in:
parent
fa5e4cb6a3
commit
a38afc2d6a
|
@ -0,0 +1,24 @@
|
|||
# Generated by Django 2.1.7 on 2019-03-25 13:32
|
||||
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
('perks', '0003_auto_20190324_2135'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='User',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('base_user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
|
||||
('perks', models.ManyToManyField(related_name='users', to='perks.Perk')),
|
||||
],
|
||||
),
|
||||
]
|
|
@ -7,6 +7,7 @@
|
|||
# Distributed under terms of the BSD-3-Clause license.
|
||||
|
||||
from django.db import models
|
||||
from django.contrib.auth.models import User as AuthUser
|
||||
|
||||
|
||||
class Tree(models.Model):
|
||||
|
@ -32,3 +33,9 @@ class Perk(models.Model):
|
|||
|
||||
class Meta:
|
||||
ordering = ('name',)
|
||||
|
||||
|
||||
class User(models.Model):
|
||||
base_user = models.OneToOneField(AuthUser, on_delete=models.CASCADE)
|
||||
perks = models.ManyToManyField(Perk, related_name='users', symmetrical=False)
|
||||
|
||||
|
|
|
@ -6,8 +6,10 @@
|
|||
#
|
||||
# Distributed under terms of the BSD-3-Clause license.
|
||||
|
||||
from django.contrib.auth.models import User as AuthUser
|
||||
from rest_framework import serializers
|
||||
# from .models import Perk, Tree
|
||||
|
||||
from .models import Perk, Tree, User
|
||||
|
||||
|
||||
class PerkSerializer(serializers.Serializer):
|
||||
|
@ -16,11 +18,45 @@ class PerkSerializer(serializers.Serializer):
|
|||
effect = serializers.CharField(read_only=True)
|
||||
level = serializers.IntegerField(read_only=True)
|
||||
type = serializers.IntegerField(read_only=True)
|
||||
# parents = serializers.ListField(read_only=True)
|
||||
# trees = serializers.ListField(read_only=True)
|
||||
|
||||
class Meta:
|
||||
model = Perk
|
||||
fields = ('id', 'name', 'effect', 'level', 'type')
|
||||
|
||||
|
||||
class TreeSerializer(serializers.Serializer):
|
||||
id = serializers.IntegerField(read_only=True)
|
||||
name = serializers.CharField(read_only=True)
|
||||
|
||||
class Meta:
|
||||
model = Tree
|
||||
fields = ('id', 'name')
|
||||
|
||||
|
||||
class AuthUserSerializer(serializers.Serializer):
|
||||
id = serializers.IntegerField(read_only=True)
|
||||
username = serializers.CharField(read_only=True)
|
||||
email = serializers.CharField(read_only=True)
|
||||
|
||||
class Meta:
|
||||
model = AuthUser
|
||||
fields = ('id', 'username', 'email')
|
||||
|
||||
|
||||
class UserSerializer(serializers.Serializer):
|
||||
id = serializers.IntegerField(read_only=True)
|
||||
perks = serializers.PrimaryKeyRelatedField(queryset=Perk.objects.all(), many=True)
|
||||
base_user = AuthUserSerializer(required=False, many=False)
|
||||
|
||||
class Meta:
|
||||
model = User
|
||||
fields = ('id', 'perks', 'base_user')
|
||||
|
||||
|
||||
# class AuthorSerializer(serializers.ModelSerializer):
|
||||
# book_list = BookSerializer(many=True, read_only=True)
|
||||
|
||||
# class Meta:
|
||||
# model = Author
|
||||
# fields = ('id', 'name', 'last_name', 'book_list')
|
||||
|
||||
|
|
|
@ -2,7 +2,8 @@ from django.urls import path
|
|||
from perks import views
|
||||
|
||||
urlpatterns = [
|
||||
path('trees', views.Trees.as_view()),
|
||||
path('trees/<int:tree_id>', views.Perks.as_view()),
|
||||
path('trees', views.TreeView.as_view()),
|
||||
path('trees/<int:tree_id>', views.PerkView.as_view()),
|
||||
path('users/<int:user_id>', views.UserView.as_view()),
|
||||
]
|
||||
|
||||
|
|
|
@ -12,8 +12,8 @@ from rest_framework.response import Response
|
|||
from rest_framework import authentication # , permissions
|
||||
|
||||
from .parser import PerkParser
|
||||
from .models import Perk, Tree
|
||||
from .serializers import PerkSerializer, TreeSerializer
|
||||
from .models import Perk, Tree, User
|
||||
from .serializers import PerkSerializer, TreeSerializer, UserSerializer
|
||||
|
||||
|
||||
PERKS_DIR = environ.get('PERKS_DIR')
|
||||
|
@ -22,7 +22,7 @@ if not PERKS_DIR:
|
|||
PERKS_DIR = '../static/perks'
|
||||
|
||||
|
||||
class Trees(APIView):
|
||||
class TreeView(APIView):
|
||||
authentication_classes = (authentication.TokenAuthentication,)
|
||||
# permission_classes = (permissions.IsAuthenticated,)
|
||||
|
||||
|
@ -46,7 +46,7 @@ class Trees(APIView):
|
|||
return Response({'message': 'Upload successful'})
|
||||
|
||||
|
||||
class Perks(APIView):
|
||||
class PerkView(APIView):
|
||||
authentication_classes = (authentication.TokenAuthentication,)
|
||||
# permission_classes = (permissions.IsAuthenticated,)
|
||||
|
||||
|
@ -83,3 +83,13 @@ class Perks(APIView):
|
|||
|
||||
return Response(output_data)
|
||||
|
||||
|
||||
class UserView(APIView):
|
||||
authentication_classes = (authentication.TokenAuthentication,)
|
||||
|
||||
def get(self, request, user_id):
|
||||
user = User.objects.get(id=user_id)
|
||||
serialized_user = UserSerializer(user).data
|
||||
|
||||
return Response(serialized_user)
|
||||
|
||||
|
|
Reference in New Issue