django - 在 Django 中序列化单个实例
问题描述
我有一个简单的“驱动程序”Django 模型,其中包含“id”、“电话”和“地址”字段。我添加了一个序列化程序和一个请求处理程序以从数据库中返回最后一个驱动程序,如下所示。当我传递单个实例驱动程序对象时,序列化程序返回空数据。但是,如果我将相同的对象作为列表传递并设置 many = True,它会将最后一个驱动程序作为列表返回。任何想法如何让序列化程序使用实例参数而不是将其包装在列表中?
def get_last_driver(request):
last_driver_object = Driver.objects.last()
# This returns empty data {"last_driver": null}
last_driver_data = DriverSerializer(last_driver_object).data
# This results a list containing one object : {"last_driver": [{"id": 3, "phone": "0123456", "address": "DemoSteet 12"}]}
last_driver_data = DriverSerializer([last_driver_object], many=True).data
return JsonResponse({"last_driver": last_driver_data})
class DriverSerializer(serializers.ModelSerializer):
class Meta:
model = Driver
fields = ("id", "phone", "address")
class Driver(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='driver')
avatar = models.CharField(max_length=500)
phone = models.CharField(max_length=500, blank=True)
address = models.CharField(max_length=500, blank=True)
def __str__(self):
return self.user.get_full_name()
解决方案
我认为您的数据库不包含任何数据。因此,在使用 API 时添加一些响应,如
from rest_framework.response import Response
def get_last_driver(request):
if not SampleModel.objects.exists(): # if atleast one object is there
return Response(data={"message": "There is no 'Driver' object in DB"})
last_driver_object = Driver.objects.last()
serializer = DriverSerializer(last_driver_object)
return Response(data=serializer.data)
并且在您的序列化程序中,不需要return
声明,因为return
在functions
. 因此,您的序列化程序会像,
class DriverSerializer(serializers.ModelSerializer):
class Meta:
model = Driver
fields = ("id", "phone", "address")
推荐阅读
- android - Exoplayer 给出错误代码 401
- random - 你能用几个已知参数构建一个确定性的无限 RNG 吗?
- reactjs - Tailwind UI 转换组件 + React Spectrum Overlay 不起作用
- android-studio - 基于 Android 事件向 Flutter 传递数据
- python - 网页抓取弹出窗口
- android - NativeScript + VueJS 与 PusherChannels
- python - 我有 2 列 x 和 y,如果 x>y 则要输出,打印 True 而不是 false
- python - 如何在 utf-8 中解码 Hangul?
- javascript - 通过 jinja 模板将 python 列表传递给 javascript 的安全性
- c# - 将复选框的标记属性绑定到祖先数据上下文