DRF return create() 方法中的序列化对象
DRF return serialized object in create() method
我正在为我的模型编写自定义创建方法:
class TripReportViewSet(viewsets.ModelViewSet):
permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
serializer_class = TripReportSerializer
pagination_class = TripReportSetPagination
# To order by favorite count or 'top':
queryset = TripReport.objects.all().annotate(count=Count('favoriters')).order_by('-count')
#queryset = TripReport.objects.all().order_by('-pk')
filter_backends = (filters.SearchFilter, filters.OrderingFilter)
search_fields = ('=author__username', '=slug', 'countries__name', )
ordering_fields = ('pk', )
def create(self, request, **kwargs):
countries = request.POST['countries'].split(',')
countries = list(map(int, countries))
countries = Country.objects.filter(pk__in=countries)
instance = TripReport.objects.create(
author=User.objects.get(pk=request.POST['author']),
title=request.POST['title'],
content=request.POST['content'],
)
instance.countries.set(countries)
instance.save()
return HttpResponse(TripReportSerializer(instance))
我似乎无法得到正确的回应。我想 return 我的序列化对象,但是
HttpResponse(instance)
和
HttpResponse(TripReportSerializer(instance))
给我错误的结果。 TripReportSerializer 是我用于查看的那个。
我发现代码有两处错误:
- 到return序列化器数据我认为你应该使用
TripReportSerializer(instance).data
- Rest Framework 视图通常return一个
Response
对象,它是从rest_framework.response.Response
导入的
您应该做的另一项修改是使用视图 get_serializer()
方法,这样序列化器将填充上下文(视图、格式和请求),在您的情况下,这意味着在创建方法结束。
serializer = self.get_serializer(instance)
return Response(serializer.data)
你要做的是,serialize the newly created Trip
instance and return by using DRF's Response
class
<b>from rest_framework.response import Response</b>
class TripReportViewSet(viewsets.ModelViewSet):
permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
serializer_class = TripReportSerializer
pagination_class = TripReportSetPagination
# To order by favorite count or 'top':
queryset = TripReport.objects.all().annotate(count=Count('favoriters')).order_by('-count')
# queryset = TripReport.objects.all().order_by('-pk')
filter_backends = (filters.SearchFilter, filters.OrderingFilter)
search_fields = ('=author__username', '=slug', 'countries__name',)
ordering_fields = ('pk',)
def create(self, request, **kwargs):
countries = request.POST['countries'].split(',')
countries = list(map(int, countries))
countries = Country.objects.filter(pk__in=countries)
instance = TripReport.objects.create(
author=User.objects.get(pk=request.POST['author']),
title=request.POST['title'],
content=request.POST['content'],
)
instance.countries.set(countries)
instance.save()
<b># changes
serializer = TripReportSerializer(instance)
return Response(serializer.data)</b>
我正在为我的模型编写自定义创建方法:
class TripReportViewSet(viewsets.ModelViewSet):
permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
serializer_class = TripReportSerializer
pagination_class = TripReportSetPagination
# To order by favorite count or 'top':
queryset = TripReport.objects.all().annotate(count=Count('favoriters')).order_by('-count')
#queryset = TripReport.objects.all().order_by('-pk')
filter_backends = (filters.SearchFilter, filters.OrderingFilter)
search_fields = ('=author__username', '=slug', 'countries__name', )
ordering_fields = ('pk', )
def create(self, request, **kwargs):
countries = request.POST['countries'].split(',')
countries = list(map(int, countries))
countries = Country.objects.filter(pk__in=countries)
instance = TripReport.objects.create(
author=User.objects.get(pk=request.POST['author']),
title=request.POST['title'],
content=request.POST['content'],
)
instance.countries.set(countries)
instance.save()
return HttpResponse(TripReportSerializer(instance))
我似乎无法得到正确的回应。我想 return 我的序列化对象,但是
HttpResponse(instance)
和
HttpResponse(TripReportSerializer(instance))
给我错误的结果。 TripReportSerializer 是我用于查看的那个。
我发现代码有两处错误:
- 到return序列化器数据我认为你应该使用
TripReportSerializer(instance).data
- Rest Framework 视图通常return一个
Response
对象,它是从rest_framework.response.Response
导入的
您应该做的另一项修改是使用视图 get_serializer()
方法,这样序列化器将填充上下文(视图、格式和请求),在您的情况下,这意味着在创建方法结束。
serializer = self.get_serializer(instance)
return Response(serializer.data)
你要做的是,serialize the newly created Trip
instance and return by using DRF's Response
class
<b>from rest_framework.response import Response</b>
class TripReportViewSet(viewsets.ModelViewSet):
permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
serializer_class = TripReportSerializer
pagination_class = TripReportSetPagination
# To order by favorite count or 'top':
queryset = TripReport.objects.all().annotate(count=Count('favoriters')).order_by('-count')
# queryset = TripReport.objects.all().order_by('-pk')
filter_backends = (filters.SearchFilter, filters.OrderingFilter)
search_fields = ('=author__username', '=slug', 'countries__name',)
ordering_fields = ('pk',)
def create(self, request, **kwargs):
countries = request.POST['countries'].split(',')
countries = list(map(int, countries))
countries = Country.objects.filter(pk__in=countries)
instance = TripReport.objects.create(
author=User.objects.get(pk=request.POST['author']),
title=request.POST['title'],
content=request.POST['content'],
)
instance.countries.set(countries)
instance.save()
<b># changes
serializer = TripReportSerializer(instance)
return Response(serializer.data)</b>