【问题标题】:How to deserialize a django model object?如何反序列化 django 模型对象?
【发布时间】:2019-04-21 11:00:38
【问题描述】:

我对 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 中执行此操作。

我尝试了下面的代码 sn-p,它返回了一个 <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 中实现这一点?

【问题讨论】:

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


【解决方案1】:

首先要序列化对象:

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

【讨论】:

  • 它没有回答这个说法,我怎样才能把它转换成 django 模型类类型?
  • 是的。如果被序列化的对象是一个 Django Model 对象(就像在 OP 的帖子中一样),那么反序列化和访问 .object 属性将为您提供一个 Django Model 类型的对象。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多