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

Jos*_*ich 19 django serialization json

我正在序列化一堆对象:

json = serializers.serialize("json", objects, fields=('name', 'country'))
Run Code Online (Sandbox Code Playgroud)

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

如果没有输出JSON,那么告诉serializers.serialze()不包含主键的正确方法是什么?

Jos*_*ich 17

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

from django.utils import simplejson
json = simplejson.dumps( [{'name': o.name,
                           'country': o.country} for o in objects] )
Run Code Online (Sandbox Code Playgroud)

打字多一点,但有效.


小智 9

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

data = json.loads(json_string)

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

data = json.dumps(data)
Run Code Online (Sandbox Code Playgroud)

这样,您在将来添加更多字段时无需担心更新代码.


sau*_*ito 7

您也可以覆盖JSON序列化程序,如下所述:覆盖Django对象序列化程序以摆脱指定的模型

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)
Run Code Online (Sandbox Code Playgroud)