非常快速的问题是如何在Django-rest-framework中嵌套请求。我有一个结束点A,我在POST上,并希望再次请求在其序列化程序perform_create方法中指向B.这个API端点实际上是在同一个Django应用程序中编写的。
API A的序列化程序
class ReadingCreate(CreateAPIView):
permission_classes = [IsOwnerOrReadOnly]
serializer_class = ReadingCreateSerializer
def perform_create(self, serializer):
#HERE I WANT TO MAKE REQUEST TO POINT B
serializer.save(user_profile= UserProfile.objects.get(user=self.request.user))
我熟悉请求等库,但我希望有更好的方法,因为我还需要发送令牌进行身份验证,我就像在同一个文件中。这个问题看似简单,但我显然不知道如何正确地做到这一点。
更新 要解释更多,"请求"我应该通过ReadingCreateSerializer找到一本基于isbn的书。但首先我需要找一本书(Google API),然后将其保存到我的数据库中。这需要完成,因为书模型独立于UserProfile对象而Reading不是(有附加信息)。这就是我的要求"确实。
当然,这可以通过客户的两个连锁请求来完成,但我不想这样做。
串行器:
class ReadingCreateSerializer(serializers.HyperlinkedModelSerializer):
isbn = serializers.CharField(required=True, max_length=20)
class Meta:
model = Reading
fields = ['isbn', 'notes', 'rating', 'start_reading_date', 'end_reading_date']
我根据答案尝试的内容:视图的一部分和序列化程序的一部分
def perform_create(self, serializer):
self.request.method = 'POST'
serializer.save(user_profile=UserProfile.objects.get(user=self.request.user), request=self.request)
def save(self, **kwargs):
isbn = self.validated_data['isbn']
request = kwargs.get("request", {})
request.data = {'isbn': isbn}
post_book(request)
我发现我无法将视图(在我的示例中为post_book)导入序列化程序,我猜Django不允许这样做。
答案 0 :(得分:2)
这将执行您的API类。
APIClassB.as_view()(self.request)
如果您需要更改请求方法
self.request.method = 'POST'
APIClassB.as_view()(self.request)