简体   繁体   English

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

[英]How to deserialize a django model object?

I am fairly new to python and transitioning from Java, so I'll use the Java terminologies as I need to know the equivalent python version of it. 我是python的新手,并且正在从Java过渡,因此我将使用Java术语,因为我需要知道它的等效python版本。

So I have a Django model as described below: 所以我有一个Django模型,如下所述:

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

Also I have a kafka broker to process these orders. 我也有一个卡夫卡经纪人来处理这些订单。 To push these into a kafka queue, I am transforming them into JSON objects as depicted below: 要将它们推送到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)

Now I need this JSON object to be converted back to Django model object, in Java we have something called as Jackson which could have done the same for me, but I am not sure how to do this in Python3. 现在,我需要将此JSON对象转换回Django模型对象,在Java中,我们有一个称为Jackson的东西可以对我做同样的事情,但是我不确定如何在Python3中做到这一点。

I tried the below code snippet, it returned me an object of type <generator object Deserializer at 0x7fe000323bf8> 我尝试了下面的代码片段,它返回了一个<generator object Deserializer at 0x7fe000323bf8>类型的<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())

How can I achieve this in Python3? 如何在Python3中实现?

First to serialize the object do this: 首先对对象进行序列化:

from django.core import serializers

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

To deserialize the object from it 从对象反序列化

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

serializers.deserialize() gives an Deserializedobject serializers.deserialize()给出一个反序列化的对象

To get more details refer Django object deserialization 要获取更多详细信息,请参阅Django对象反序列化

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM