DRF:listview get works,detailview返回空响应

时间:2016-01-28 11:40:31

标签: django django-rest-framework

请耐心等待。我做了些傻事,但我不知道是什么。

我正在调整/遵循Django Rest Framework的教程。

我使用本教程的序列化部分来返回用户(列表和详细信息视图)。

我的listview(列出所有用户)完美无缺。

我的详细信息视图并非如此。我可以看到序列化程序实例正在填充详细视图的用户,但是serializer.data是空的。

不会返回任何错误,只是空回复{}。

我做错了什么?

这有效:

@csrf_exempt
def parentList(request):
    """
    List all parents or create a new parent
    """
    if request.method == 'GET':
        theseParents = PlatformUser.objects.all()
        serializer = parentSerializer(theseParents, many=True)
        return baseJSONResponse(serializer.data)
来自序列化程序的

片段:

class parentSerializer(serializers.ModelSerializer):
    class Meta:
        model = PlatformUser
        fields = ('pk', 'email', 'first_name', 'last_name', 'phone', 'home_address_1', 'home_address_2', 'city', 'country', 'home_postcode', 'photo', 'overview')

这不起作用(serializer.data为空,但填充了序列化程序):

def parentDetails(request, pk):
    """
    Retrieve or update a parent record
    """
    try:
        thisParent = PlatformUser.objects.filter(pk=pk)
    except thisParent.DoesNotExist:
        return HttpResponse(status=404)

    if request.method == 'GET':
        serializer=parentSerializer(thisParent)
        return baseJSONResponse(serializer.data)

1 个答案:

答案 0 :(得分:0)

您的查询集似乎是空的。

"除了不存在"过滤器是无用的。如果没有选中thisParent的对象将为空查询集但不引发异常。

如果要在不存在的对象上获取404并将对象作为queryset传递给序列化程序,则需要重写这样的代码。

thisParent = PlatformUser.objects.filter(pk=pk)
if not thisParent.exists():
    return HttpResponse(status=404)

我建议您使用Rest Framework中的通用视图。