Python DRF在create()方法中返回序列化对象
我正在为我的模型编写一个自定义创建方法:Python DRF在create()方法中返回序列化对象,python,django-rest-framework,django-serializer,Python,Django Rest Framework,Django Serializer,我正在为我的模型编写一个自定义创建方法: class TripReportViewSet(viewsets.ModelViewSet): permission_classes = (permissions.IsAuthenticatedOrReadOnly,) serializer_class = TripReportSerializer pagination_class = TripReportSetPagination # To order by favori
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))
我似乎没有得到正确的回答。我想返回序列化对象,但是
HttpResponse(instance)
及
给了我错误的结果。TripReportSerializer是我用于视图的那个 我发现代码有两个问题:
TripReportSerializer(instance).data
Response
对象,该对象是从Rest\u Framework.Response.Response
get\u serializer()
方法,以便使用上下文(视图、格式和请求)填充序列化程序,在您的情况下,这意味着在创建方法的末尾使用此代码
serializer = self.get_serializer(instance)
return Response(serializer.data)
您需要做的是,使用DRF的类返回
来自rest\u framework.response导入响应
类TripReportViewSet(viewsets.ModelViewSet):
权限\类=(permissions.IsAuthenticatedOrReadOnly,)
serializer\u class=TripReportSerializer
分页\u class=TripReportSetPagination
#要按收藏夹计数或“顶部”订购,请执行以下操作:
queryset=TripReport.objects.all().annotate(count=count('favoriters')).order_by('-count'))
#queryset=TripReport.objects.all().order_by('-pk')
过滤器\后端=(filters.SearchFilter,filters.OrderingFilter)
搜索字段=('=author\uuuuu username','=slug','countries\uuuuu name',)
排序_字段=('pk',)
def创建(自我、请求、**kwargs):
countries=request.POST['countries'].split(','))
国家=列表(地图(国际,国家))
countries=Country.objects.filter(pk\uu in=countries)
实例=TripReport.objects.create(
author=User.objects.get(pk=request.POST['author']),
title=request.POST['title'],
content=request.POST['content'],
)
instance.countries.set(国家)
save()实例
#变化
serializer=TripReportSerializer(实例)
return Response(serializer.data)
您正在返回instance.save()
在返回您的HttpResponse
@AuroraWang噢,这实际上是stackoverflow的一个输入错误,我试着看看它是否有效。在我的实际代码中,我把它改回来了。
serializer = self.get_serializer(instance)
return Response(serializer.data)
from rest_framework.response import Response
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()
# changes
serializer = TripReportSerializer(instance)
return Response(serializer.data)