如何反序列化Django模型对象?

时间:2019-04-21 11:00:39

标签: python django python-3.x django-models

我对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经纪人来处理这些订单。要将它们推送到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中实现这一目标?

1 个答案:

答案 0 :(得分:2)

首先要序列化对象,请执行以下操作:

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 object deserialization