Advertisement
themaleem

serializer.py

Jul 17th, 2023
53
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.00 KB | None | 0 0
  1. from dataclasses import field
  2. from django.urls import reverse
  3. from rest_framework import serializers
  4.  
  5.  
  6. from .models import Student, Group, User
  7. from studentregistration.models import Module, Registration
  8.  
  9.  
  10. class UsernameHyperlinkedIdentityField(serializers.HyperlinkedIdentityField):
  11.     def to_representation(self, value):
  12.         username = value.user.username
  13.         request = self.context.get("request")
  14.         kwargs = {self.lookup_field: username}
  15.         path = reverse(self.view_name, kwargs=kwargs)
  16.         return request.build_absolute_uri(path)
  17.  
  18.  
  19. class UserSerializer(serializers.ModelSerializer):
  20.     password = serializers.CharField(write_only=True)
  21.  
  22.     class Meta:
  23.         model = User
  24.         fields = ["username", "email", "first_name", "last_name", "password"]
  25.  
  26.     def create(self, validated_data):
  27.         password = validated_data.pop("password")
  28.         user = User(**validated_data)
  29.         user.set_password(password)
  30.         user.save()
  31.         return user
  32.  
  33.  
  34. class StudentSerializer(serializers.HyperlinkedModelSerializer):
  35.     course = serializers.SlugRelatedField(
  36.         queryset=Group.objects.all(), slug_field="name"
  37.     )
  38.     email = serializers.ReadOnlyField(source="user.email")
  39.     student_id = serializers.ReadOnlyField(source="user.username")
  40.     url = UsernameHyperlinkedIdentityField(
  41.         view_name="student-detail", lookup_field="username"
  42.     )
  43.  
  44.     class Meta:
  45.         model = Student
  46.         fields = [
  47.             "url",
  48.             "student_id",
  49.             "email",
  50.             "address",
  51.             "city",
  52.             "country",
  53.             "photo",
  54.             "course",
  55.         ]
  56.  
  57.  
  58. class StudentRegistrationDetailsSerializer(serializers.Serializer):
  59.     student = serializers.CharField()
  60.     date = serializers.DateTimeField()
  61.  
  62.  
  63. class ModuleSerializer(serializers.HyperlinkedModelSerializer):
  64.     courses = serializers.SlugRelatedField(many=True, read_only=True, slug_field="name")
  65.     url = serializers.HyperlinkedIdentityField(
  66.         view_name="module-detail", lookup_field="code"
  67.     )
  68.     student_registration_details = StudentRegistrationDetailsSerializer(
  69.         many=True, read_only=True
  70.     )
  71.  
  72.     class Meta:
  73.         model = Module
  74.         fields = [
  75.             "url",
  76.             "name",
  77.             "code",
  78.             "credit",
  79.             "category",
  80.             "description",
  81.             "available",
  82.             "courses",
  83.             "student_registration_details",
  84.         ]
  85.  
  86.  
  87. class CourseModules(serializers.HyperlinkedModelSerializer):
  88.     url = serializers.HyperlinkedIdentityField(
  89.         view_name="module-detail", lookup_field="code"
  90.     )
  91.  
  92.     class Meta:
  93.         model = Module
  94.  
  95.         fields = [
  96.             "url",
  97.             "name",
  98.         ]
  99.  
  100.  
  101. class CourseSerializer(serializers.HyperlinkedModelSerializer):
  102.     modules = CourseModules(many=True, read_only=True)
  103.  
  104.     class Meta:
  105.         model = Group
  106.         fields = ["url", "id", "name", "modules"]
  107.  
  108.  
  109. class ModuleRegistrationSerializer(serializers.HyperlinkedModelSerializer):
  110.     url = serializers.HyperlinkedIdentityField(
  111.         view_name="module-detail", lookup_field="code"
  112.     )
  113.  
  114.     class Meta:
  115.         model = Module
  116.         fields = ["url", "name", "code", "credit"]
  117.  
  118.  
  119. class StudentRegistrationSerializer(serializers.HyperlinkedModelSerializer):
  120.     course = serializers.SlugRelatedField(
  121.         queryset=Group.objects.all(), slug_field="name"
  122.     )
  123.     student_id = serializers.ReadOnlyField(source="user.username")
  124.     url = UsernameHyperlinkedIdentityField(
  125.         view_name="student-detail", lookup_field="username"
  126.     )
  127.  
  128.     class Meta:
  129.         model = Student
  130.         fields = ["url", "student_id", "course"]
  131.  
  132.  
  133. class RegistrationSerializer(serializers.HyperlinkedModelSerializer):
  134.     module = ModuleRegistrationSerializer()
  135.     student = StudentRegistrationSerializer()
  136.  
  137.     class Meta:
  138.         model = Registration
  139.         fields = ["url", "id", "student", "module", "registration_date"]
  140.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement