小编pzi*_*ijd的帖子

Django ArrayField的序列化转义了带有太多反斜杠的重音字符

Django为我们提供了ArrayField:一个PostgreSQL特定的模型字段,允许存储数据列表.

我用它来模拟Article对象:

authors = ArrayField(models.Charfield) 
title = models.CharField
Run Code Online (Sandbox Code Playgroud)

例如,这是数据库中的一个条目:

  • authors = {"PierreStévens","Jacques Dupont"}
  • title = Sur leterraincrétacédeLiège

我想将所有文章导出为JSON:

query_set = Article.objects.all()
articles_json = serialize('json', fields('authors', 'title')
Run Code Online (Sandbox Code Playgroud)

ArrayField"authors"的序列化使用四个反斜杠而不是两个反转字符"é".常规"标题"字段已正确转义.看看差异:

articles_json = {"title":"Sur le terrain cr\\u00e9tac\\u00e9 de Li\\u00e9ge", "authors": "[\\"Pierre St\\\\u00e9\\", "Jacques Dupont"]"}
Run Code Online (Sandbox Code Playgroud)

客户不理解这一点.为了使它工作,我只是搜索并替换字符串

articles_json = articles_json.replace('\\\\','\\')
Run Code Online (Sandbox Code Playgroud)

我真的不确定这个解决方法.你有没有试过这个问题?你是怎么解决的?

django postgresql encoding json

5
推荐指数
0
解决办法
215
查看次数

Django:序列化带有通过参数的多对多关系的模型

该模型定义了Article和Author类。它们以多对多的关系链接在一起。此关系是通过自定义中介表定义的:

# models.py
class Article(models.Model):
    title = models.CharField(max_length=500)
    authors = models.ManyToManyField(Author, through='AuthorOrder')

class Author(models.Model):
    name = models.CharField(max_length=255)

class AuthorOrder(models.Model):
    author = models.ForeignKey(Author)
    article = models.ForeignKey(Article)
    writing_order = models.IntegerField()
Run Code Online (Sandbox Code Playgroud)

序列化应返回如下JSON:

#articles_json
{"fields":
     {
         "title": "A title",
         "authors": [
             {
                 "name":"Author 1",
                 "writing_order": 1
             },
             {
                 "name":"Author 2",
                 "writing_order": 2
             }
         }
     }
}
Run Code Online (Sandbox Code Playgroud)

我确定了两种解决方案。

我尝试了两者,但没有成功。您知道另一种方法吗?

django serialization

5
推荐指数
1
解决办法
1664
查看次数

标签 统计

django ×2

encoding ×1

json ×1

postgresql ×1

serialization ×1