[英]How can modify response send by django rest framework
我使用Django REST as backend
和 angular 作為前端。
我有兩個序列化程序,一個用於 readong GET 請求,另一個用於 POST、PUT 請求。
這是因為我在interval
中輸入的字段很少,例如用戶,但在數據庫中我保存為 timedelta,所以我必須將它們相乘以使它們成為前端的秒數。
因此,例如用戶輸入的interval = 5
,我將5*60*60
發布到服務器。
為了閱讀,我制作了ReadSerializer
,我將其潛水 60*60 以再次向用戶顯示他添加的內容。
這是工作發現我的問題是在將我的 object 保存到數據庫后 djnago rest 框架發送 object 因為它被保存為 06,其interval = 5*60*60
inerval 只是一個例子,有 4-5 個字段,我在發布之前在前端更改它們
有沒有什么方法可以讓響應READ serializer before sending
程序
class Serializer(serializers.ModelSerializer):
interval = serializers.SerializerMethodField('get_interval')
class Meta:
model = User
fields = ('id', 'interval')
def get_interval(self, obj):
return obj.interval/60*60
class WriteSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ('id', 'interval')
這是視圖
class UserListCreateView(generics.ListCreateAPIView):
queryset = User.objects.filter(is_deleted=False)
def get_serializer_class(self):
if self.request.method == 'GET':
return ReadSerializer
return WriteSerializer
您可以使用transform_field方法,該方法允許您在顯示字段時自定義字段的表示形式。
有關它的文檔: http : //www.django-rest-framework.org/api-guide/serializers/#customizing-field-representation
順便說一下,如果你打算升級到drf(> = 3)的新版本,請注意這些方法可能會消失,轉而采用獨特的to_representation
方法: https : to_representation
? to_representation
! topic / Django的休息框架/ 9kp5kXCssR4
我只是在前端的 JavaScript 中更改它。 但是我有一個類似的問題並像這樣解決了它,(警告,我剛開始使用 DRF,所以可能不是最好的方法):
只需直接更改方法的響應,首先獲取原始響應,然后編輯它的data
屬性,這是要返回的數據的 dict(預序列化):
class UserListCreateView(generics.ListCreateAPIView):
...
def list(self, request, *args, **kwargs):
response = super().list(request, *args, **kwargs)
response.data['interval'] = response.data['interval'] / 60 / 60
return response
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.