Also return distance in study group serializers

This commit is contained in:
Keannu Christian Bernasol 2023-09-30 17:06:35 +08:00
parent 2e4a52eded
commit 0ecfb2223a
3 changed files with 64 additions and 37 deletions

View file

@ -26,7 +26,34 @@ class StudyGroupSerializer(serializers.ModelSerializer):
class Meta:
model = StudyGroup
fields = '__all__'
read_only_fields = ['landmark', 'radius', 'students']
read_only_fields = ['landmark', 'radius', 'students', 'distance']
class StudyGroupDistanceSerializer(serializers.ModelSerializer):
name = serializers.CharField()
students = serializers.StringRelatedField(many=True)
subject = serializers.SlugRelatedField(
many=False, slug_field='name', queryset=Subject.objects.all(), required=True, allow_null=False)
location = PointField()
landmark = serializers.SlugRelatedField(
queryset=Landmark.objects.all(), many=False, slug_field='name', required=False, allow_null=True)
radius = serializers.FloatField()
distance = serializers.SerializerMethodField(default=0)
class Meta:
model = StudyGroup
fields = '__all__'
read_only_fields = ['landmark', 'radius', 'students', 'distance']
def get_distance(self, obj):
if hasattr(obj, 'distance'):
return obj.distance.km
return 0
def to_representation(self, instance):
representation = super().to_representation(instance)
representation['distance'] = self.get_distance(instance)
return representation
class FullNameSlugRelatedField(serializers.SlugRelatedField):

View file

@ -2,7 +2,7 @@ from django.shortcuts import render
from rest_framework import generics, mixins
from rest_framework.exceptions import PermissionDenied
from rest_framework.permissions import IsAuthenticated
from .serializers import StudyGroupSerializer, StudyGroupCreateSerializer
from .serializers import StudyGroupSerializer, StudyGroupCreateSerializer, StudyGroupDistanceSerializer
from .models import StudyGroup
from subjects.models import Subject, SubjectInstance
from student_status.models import StudentStatus
@ -63,7 +63,7 @@ class StudyGroupListView(generics.ListAPIView):
class StudyGroupListNearView(generics.ListAPIView):
permission_classes = [IsAuthenticated]
serializer_class = StudyGroupSerializer
serializer_class = StudyGroupDistanceSerializer
queryset = StudyGroup.objects.all()
def get_queryset(self):