首页 > 解决方案 > 如何反序列化 django 模型对象?

问题描述

我对 python 和从 Java 过渡还很陌生,所以我将使用 Java 术语,因为我需要知道它的等效 python 版本。

所以我有一个如下所述的 Django 模型:

class Order(models.Model) :
    order_id = models.TextField(null=False, blank=False)
    is_completed = models.BooleanField(null=False, blank=False, default=False)

我也有一个卡夫卡经纪人来处理这些订单。为了将这些推送到 kafka 队列中,我将它们转换为 JSON 对象,如下所示:

from django.core import serializers

serialized_obj = serializers.serialize('json', [order])
print("Pushing to kafka topic ", "some_topic")
print(serialized_obj)
send_message("some_topic", serialized_obj)

现在我需要将这个 JSON 对象转换回 Django 模型对象,在Java中我们有一个叫做Jackson的东西,它可以为我做同样的事情,但我不知道如何在 Python3 中做到这一点。

我尝试了下面的代码片段,它返回给我一个类型的对象<generator object Deserializer at 0x7fe000323bf8>

# consumer.py
try:
  print(json.loads(msg.value()))
  print("---------------------------------")
  obj = serializers.deserialize("json", msg.value())
  print(obj)
  except Exception as e:
    import traceback
    print(traceback.format_exc())

如何在 Python3 中实现这一点?

标签: pythondjangopython-3.xdjango-models

解决方案


首先序列化对象这样做:

from django.core import serializers

d = serializers.serialize('json', Order.objects.all()) # serialize all the objects in Order model

从它反序列化对象

for obj in serializers.deserialize('json', d):
    print(obj.object) ## return the django model class object

serializers.deserialize()给出一个反序列化对象

要获取更多详细信息,请参阅Django 对象反序列化


推荐阅读