繁体   English   中英

从Django获取自定义的剩余数据

[英]Fetching custom rest data from Django

我使用Django作为服务器端,使用angular作为客户端。

我想从django rest api后端获取数据。 我看了很多关于从一个已经存在的模块中获取数据的教程。 但是,如果我想检索包含多个模块的数据怎么办?

例如,我有两个模块Reservations和Clubs。 我想从两个模块中获取包含特定俱乐部ID的数据的json对象。

模块-

class Club(models.Model):
    name = models.CharField(max_length=1024)
    image_path = models.CharField(max_length=1024)

class Reservation(models.Model):
    club = models.ForeignKey('Club')
    user = models.CharField(max_length=1024)
    is_paid = models.BooleanField(default=False)

序列化器-

class ReservationSerializer(serializers.ModelSerializer):
    class Meta:
        model = Reservation
        fields  = ('club', 'user')

class ClubSerializer(serializers.ModelSerializer):
    class Meta:
        model = Club
        fields = ('id', 'name', 'surfaces')

视图集-

class ReservationViewSet(generics.ListAPIView):
    serializer_class = ReservationSerializer
    queryset = Reservation.objects.all()
    filter_backends = (filters.DjangoFilterBackend,)
    filter_fields = ('id', 'club')

class ClubViewSet(generics.ListAPIView):
    queryset = Club.objects.all()
    serializer_class = ClubSerializer
    filter_backends = (filters.DjangoFilterBackend,)
    filter_fields = ('id', 'name')

因此,对于这个例子,我希望在获取此网址时-
http://127.0.0.1:8000/api/initial_data?club=2
它将运行执行一些逻辑的ViewSet,然后返回此格式的json-

{club_id: 2, reservations: {1:"John", 2:"Doe", 3:"Bob"} }

更笼统地说-如何返回给定URL参数的自定义json,其中包含来自多个模块的数据(返回客户端)?

编辑-如果我想返回一个简单的JSON,考虑到每个视图集都已映射到模型/序列化器这一事实,我该如何使用django DRF进行处理?
也许使用简单的JsonResponse ..?

您可以将一个序列化器定义为另一个序列化器中的字段

class ReservationSerializer(serializers.ModelSerializer):
    ...

class ClubSerializer(serializers.ModelSerializer):
    reservations = ReservationSerializer(many=True, read_only=True)
    ...

现在,ClubSerializer将在每个俱乐部内返回预订

您可以使用APIView并重写get方法。

def get(self, request)

club = request.query_params.get('club', None)

"""
Do anything, access data, prepare dictionary or list with result
"""

return Response(result_dictionary_or_list)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM