空queryset的Django rest框架序列化程序数据

2024-06-02 08:21:09 发布

您现在位置:Python中文网/ 问答频道 /正文

如果queryset中没有对象,是否有方法为所有属性发送空值

models.py

class ExampleModel(models.Model):
    key1 = models.CharField(max_length=100)
    key2 = models.CharField(max_length=100)
    key3 = models.CharField(max_length=100)

序列化程序.py

class ExampleModelSerializer(serializers.ModelSerializer):
    class Meta:
        model = ExampleModel
        fields = '__all__'

views.py

@api_view(['GET'])
def objects_list(request):
    if ExampleModel.objects.all():
        objects = ExampleModel.objects.all()
        serializer = ExampleModelSerializer(objects, many=True)
        return Response(serializer.data)
    else:
        return Response('No Objects')

在本例中,如果没有对象,那么有没有一种方法可以获得这样的响应而不是字符串

[    
    {
        "id": null,
        "key1": null,
        "key2": null,
        "key3": null,
    }
]

Tags: 对象方法pyobjectsmodelsallnulllength
1条回答
网友
1楼 · 发布于 2024-06-02 08:21:09

这只是一个想法,但我认为在这种情况下,使用来自django-rest-framework的正常Serializer比使用ModelSerializer更容易

class TestSerializer(serializers.Serializer):
    key1 = serializers.CharField(max_length=100, allow_null=True, required=False)
    key2 = serializers.CharField(max_length=100, allow_null=True, required=False)
    key3 = serializers.CharField(max_length=100, allow_null=True, required=False)


class TestModelSerializer(serializers.ModelSerializer):
    """
    A model serializer would also work, you'd just have to
    do some of the manual work yourself for a few fields
    """
    id = serializers.UUIDField()
    created_at = serializers.DateTimeField()

    class Meta:
        model = ExampleModel
        fields = ('id', 'created_at', 'key1', 'key2', 'key3')


@api_view(['GET'])
def objects_list(request):
    if ExampleModel.objects.all():
        objects = ExampleModel.objects.all()
        serializer = ExampleModelSerializer(objects, many=True)
        return Response(serializer.data)
    else:
        initial = {'key1': None, 'key2': None, 'key3': None}
        serializer = TestSerializer(data=initial)
        serializer.is_valid(raise_exception=True)
        return Response(serializer.data)

将在响应中返回如下内容:

{
  "key1": null,
  "key2": null,
  "key3": null
}

相关问题 更多 >