Как десериализовать объект модели Django? - PullRequest
0 голосов
/ 21 апреля 2019

Я довольно плохо знаком с 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 у нас есть нечто, называемое Джексон , которое могло бы сделать то же самое для меня, но я не уверен, как это сделать в 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 Ответ

2 голосов
/ 21 апреля 2019

Сначала для сериализации объекта сделайте следующее:

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

...