mirror of
https://github.com/lemeow125/StudE-Backend.git
synced 2025-06-28 16:25:44 +08:00
Improved serializers for filtering nearby students studying
This commit is contained in:
parent
0436f8082f
commit
49afdc981f
4 changed files with 77 additions and 9 deletions
|
@ -55,8 +55,25 @@ class StudentStatusSerializer(serializers.ModelSerializer):
|
|||
|
||||
|
||||
class StudentStatusLocationSerializer(serializers.ModelSerializer):
|
||||
user = serializers.CharField(source='user.full_name', read_only=True)
|
||||
subject = serializers.SlugRelatedField(
|
||||
queryset=Subject.objects.all(), slug_field='name', required=True)
|
||||
location = PointField(required=True)
|
||||
distance = serializers.SerializerMethodField()
|
||||
landmark = serializers.SlugRelatedField(
|
||||
queryset=Landmark.objects.all(), many=False, slug_field='name', required=False, allow_null=True)
|
||||
|
||||
class Meta:
|
||||
model = StudentStatus
|
||||
fields = ['location']
|
||||
fields = ['user', 'location', 'distance',
|
||||
'subject', 'active', 'study_group', 'landmark']
|
||||
read_only_fields = ['user', 'distance', 'subject',
|
||||
'active', 'study_group', 'landmark']
|
||||
|
||||
def get_distance(self, obj):
|
||||
return obj.distance.km
|
||||
|
||||
def to_representation(self, instance):
|
||||
representation = super().to_representation(instance)
|
||||
representation['distance'] = self.get_distance(instance)
|
||||
return representation
|
||||
|
|
|
@ -29,8 +29,9 @@ class ActiveStudentStatusListAPIView(generics.ListAPIView):
|
|||
|
||||
|
||||
class StudentStatusListByStudentStatusLocation(generics.ListAPIView):
|
||||
serializer_class = StudentStatusSerializer
|
||||
serializer_class = StudentStatusLocationSerializer
|
||||
permission_classes = [IsAuthenticated]
|
||||
http_method_names = ['get']
|
||||
|
||||
def get_queryset(self):
|
||||
user = self.request.user
|
||||
|
@ -46,7 +47,8 @@ class StudentStatusListByStudentStatusLocation(generics.ListAPIView):
|
|||
|
||||
class StudentStatusListByCurrentLocation(viewsets.ViewSet):
|
||||
serializer_class = StudentStatusLocationSerializer
|
||||
# permission_classes = [IsAuthenticated]
|
||||
permission_classes = [IsAuthenticated]
|
||||
http_method_names = ['post']
|
||||
|
||||
def create(self, request):
|
||||
user = self.request.user
|
||||
|
@ -57,5 +59,5 @@ class StudentStatusListByCurrentLocation(viewsets.ViewSet):
|
|||
user_location = fromstr(location_str, srid=4326)
|
||||
queryset = StudentStatus.objects.filter(subject__in=user.subjects.all()).annotate(
|
||||
distance=Distance('location', user_location)).filter(distance__lte=50)
|
||||
serializer = StudentStatusSerializer(queryset, many=True)
|
||||
serializer = StudentStatusLocationSerializer(queryset, many=True)
|
||||
return Response(serializer.data)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue