首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从django序列化对象中移除pk字段

从django序列化对象中移除pk字段
EN

Stack Overflow用户
提问于 2009-10-24 04:13:16
回答 7查看 14.3K关注 0票数 22

我使用以下命令来序列化一组对象:

代码语言:javascript
复制
json = serializers.serialize("json", objects, fields=('name', 'country'))

我没有在我的字段列表中包含'pk‘,但是生成的JSON包含了每个序列化对象的主键。我不希望我的API向公众公开主键。

除了处理输出JSON之外,告诉serializers.serialze()不要包含主键的正确方法是什么?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2009-10-24 05:24:43

我最终通过使用底层simplejson序列化程序“手动”实现了我想要的东西来解决这个问题:

代码语言:javascript
复制
from django.utils import simplejson
json = simplejson.dumps( [{'name': o.name,
                           'country': o.country} for o in objects] )

更多的打字,但很有效。

票数 18
EN

Stack Overflow用户

发布于 2012-06-26 02:16:36

乔希做了什么,但倒退了:

代码语言:javascript
复制
data = json.loads(json_string)

for d in data:
    del d['pk']
    del d['model']

data = json.dumps(data)

这样,以后添加更多字段时,您就不必担心更新代码了。

票数 12
EN

Stack Overflow用户

发布于 2011-06-08 06:33:04

您还可以重写JSON序列化程序,如下所述:Override Django Object Serializer to get rid of specified model

代码语言:javascript
复制
from django.core.serializers.json import Serializer, DjangoJSONEncoder
from django.utils import simplejson

import logging

class MySerializer(Serializer):
    def end_serialization(self):
        cleaned_objects = []

        for obj in self.objects:
            del obj['pk']
            cleaned_objects.append(obj)

        simplejson.dump(cleaned_objects, self.stream, cls=DjangoJSONEncoder, **self.options)
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1615649

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档