#django #django-serializer
Вопрос:
Я нашел много документации о сериализации набора запросов в django, и я обнаружил, что для сериализации одного объекта или экземпляра модели вам просто нужно было поместить этот экземпляр в список» []». Но вот в чем моя проблема: я сериализовал объект в одном представлении, передал его в сеанс и десериализовал указанный объект в другом представлении, и он работает просто отлично… но то, что я получаю, — это генератор python, как я могу получить исходный объект без генератора?
представление, что я сериализовал объект
def sales_detail(request, pk=None):
sales_object = Sales.objects.get(pk=pk)
data = serializers.serialize('json', [sales_object])
request.session['data'] = data
return render(request, 'sales/detail.html', context)
представление о том, что я десериализовал объект
def connect_page(request, item_type=None, item_id=None):
data = request.session.get('data', None)
print("Serialized Obeject from Session: ", data[1:-1])
clean_data = serializers.deserialize('json', data)
print("Deserialized object from the session : ", clean_data)
...
return render(request, 'sales/connections.html', context)
Результаты для первой печати
Serialized Obeject from Session: {"model": "sales.request", "pk": 1, "fields": {"created": "2021-09-08T14:51:01.891Z", "updated": "2021-09-08T19:48:59.603Z", "description": "asa sja schsac sjbca dcbl sdac dc ahclbkscj sadc sk c sclbsclbd cS LCzx", "unit_price": 0.0, "owner": 1, "active": false, "urgent_flag": false, "completed": false, "type": "request", "quantity": 1, "edited": true, "slug": "nfs-most-wanted-2005", "title": "NFS Most Wanted 2005", "image": "uploaded_products/default_request.png", "tags": [], "categories": [8, 9]}}
Результаты для второй печати
Deserialized object from the session : <generator object Deserializer at 0x000001E220703D60>
Я знаю, что мог бы просто зациклиться на генераторе, чтобы собрать значение…но это уменьшает знание того, что этот генератор содержит только один объект …мне нужен прямой доступ без зацикливания
Комментарии:
1. Можете ли вы поделиться кодом, с помощью которого вы сериализуете и десериализуете?
2. я поделился кодом
Ответ №1:
Django не будет охотно десериализовываться, он работает лениво: он десериализуется только в том случае, если вам нужны элементы, например, для перечисления над ним.
Вы можете составить список объектов модели, построив список:
clean_data = list(serializers.deserialize('json', data))
Если вы хотите только перечислить, вы можете просто оставить его генератором и перечислить поверх него в шаблоне. Затем генератор десериализует объекты один за другим и, таким образом, выдает их в {% for … %} … {% endfor %}
цикле.