首页 > 解决方案 > 不是 JSON 可序列化的 Django 会话

问题描述

在我的 django 视图中,我有以下内容:

manifestData = form2.cleaned_data

form2是一个表单集,其中包含动态数量的表单。因此,在一种情况下,它可能只有一种形式,但在另一种情况下,它可能有 3 个或 5 个等。例如,如果它包含 2 个形式并且我执行,print(manifestData)我将得到输出:

[{'ProductCode': <Product: APPLES-1>, 'UnitQty': u'11', 'Price': u'11.00', 'Amount': u'121', 'DescriptionOfGoods': u'Washington Extra Fancy', 'Type': u'Cases', u'id': None, u'DELETE': False}, {'ProductCode': <Product: ORANGES-1>, 'UnitQty': u'1', 'Price': u'12.00', 'Amount': u'12', 'DescriptionOfGoods': u'SUNKIST ORANGES', 'Type': u'Cases', u'id': None, u'DELETE': False}]

接下来,在我看来,我试图manifestData通过会话将其传递给另一个视图,如下所示:

def quoteView(request):
...
request.session['manifestData'] = x
return redirect('QuotePreview')


class QuotePreview(View):
    def get(self, request, *args, **kwargs):

        manifestData = request.session.pop('x', {})
...

但是,我在此行收到一个错误,request.session['manifestData'] = x其中提到“APPLES-1 不是 JSON 可序列化”。我相信这是因为这是对产品模型的外键引用。

class Product(models.Model):
    ProductCode = models.CharField(max_length=100)
    HSCode = models.CharField(max_length=50, null=True)
    DescriptionOfGoods = models.CharField(max_length=100)
    Price = models.CharField(max_length=100)
    UnitType = models.CharField(max_length=100)

    def __str__(self):
        return str(self.ProductCode)

问题主要是 - 我怎样才能使这些产品代码 JSON 可序列化,以便它们可以在会话中使用?感谢:D

标签: pythondjango

解决方案


推荐阅读