从Django获取自定义休息数据

时间:2015-11-07 15:14:54

标签: python json django django-rest-framework

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

我想从我的django rest api后端获取数据。 我看到很多关于从已经存在的模块中获取数据的教程。但是,如果我想检索多个模块组合的数据呢?

例如,我有两个模块预订和俱乐部。我想要检索包含来自这两个模块的数据的json对象,以获取特定的俱乐部ID。

模块 -

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 ..?

2 个答案:

答案 0 :(得分:1)

您可以将一个序列化程序定义为另一个

中的字段
class ReservationSerializer(serializers.ModelSerializer):
    ...

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

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

答案 1 :(得分:0)

您可以使用re.findall('rebound[ \w]*defence', s) re.findall('defensive[\w]* rebound[\w]*[ rate]*', s) 并覆盖APIView方法。

get