【问题标题】:Django deserialization of JSON stored in a model field存储在模型字段中的 JSON 的 Django 反序列化
【发布时间】:2016-12-29 21:57:12
【问题描述】:

我是 Django/Python 的新手,目前正在和朋友一起做一个项目。他的 android 应用程序以如下所示的 JSON 格式向我发送数据:

"datum_isteka": "2",
"e_mail": "null",
"adress": "null",
"goods": "[
           {\"price\":\"2\",
            \"good\":\"dobro1\",
            \"tax_value\":\"2\",
            \"quantity\":\"pdv %1\"},

           {\"price\":\"3\",
            \"good\":\"dobro 2\",
            \"tax_value\":\"3\",
            \"quantity\":\"pdv %3\"}
          ]",
"taxes": 5,
"order_num": 477456,
"store_user": 2

在我的模型中,它存储在一个字段中(goods),在我看来,我得到了这个 JSON 的整个goods 部分,就像这里一样......我的问题是我如何转换这个 JSON字段goods 到用户可读的内容。我正在使用 DRF 与 Android 应用程序进行通信。

型号:

class Obraz(models.Model):
    datum_isteka = models.CharField(max_length=100,blank=True,
                                    default='', null=True)
    e_mail = models.CharField(max_length=100, blank=True, 
                              default='', null=True)
    adress = models.CharField(max_length=100, blank=True, null=True)
    taxes = models.CharField(max_length=100)
    order_num = models.CharField(max_length=100, blank=True, default='',
                                 null=True)
    goods = models.CharField(max_length=10000)
    store_user=models.ForeignKey(Owner, default='Owner')

模型序列化器:

class ObrazSerializer(serializers.ModelSerializer):
    class Meta:
        model = Obraz
        fields = ('datum_isteka', 'e_mail', 'adress', 'taxes', 
                  'order_num','goods ', 'store_user',)

【问题讨论】:

  • 那么,他正在向您发送格式错误的数据。序列化之前无需将goods 字段转换为字符串。
  • Hmm.. 有趣的是,当我在视图中显示这些 goods 时,它看起来就像一个普通的 JSON 文件。斜线不见了..
  • 你应该显示一些代码。

标签: python json django serialization django-rest-framework


【解决方案1】:

我会在模型上使用JSONField

class Obraz(models.Model):
    ...
    goods = jsonfield.JSONField()

和序列化器上的JSONField(注意它不是同一个字段):

class ObrazSerializer(serializers.ModelSerializer):
    goods = serializers.JSONField()
    class Meta:
        model = Obraz
        fields = ('datum_isteka', 'e_mail', 'adress', 'taxes', 
                  'order_num','goods', 'store_user',)

希望对你有帮助

【讨论】:

  • btw:这意味着您不再需要在客户端转义 json 了。模型上的字段会将 JSON 转换为字符串,然后再将其存储在数据库中并返回到检索数据时的dict
猜你喜欢
  • 2020-06-29
  • 1970-01-01
  • 2011-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多