<Model>类型的对象不是JSON serializab

2024-04-27 11:32:15 发布

您现在位置:Python中文网/ 问答频道 /正文

如果我有类似GFK的继承模型AssetsAsset.model),它有一个资产标识、资产名称和一个{},一种型号, SecondType.型号,都继承了Asset模型等。。。基于this),并且我想为我的Account中的所有资产提供一个API端点,我可以在Account模型上拥有一个属性,该属性是扩展不同资产类型的列表:

#Account model
@property
def assets(self):
    assets = []
    assets.extend(self.onetype_set.all())
    assets.extend(self.secondtype_set.all())
    …
    return assets

我需要一个帐户的序列化程序

^{pr2}$

我假设每种资产类型

class OneTypeSerializer(serializers.ModelSerializer):
    class Meta:
        model = OneType
        fields = ('asset_id', 'asset_name',)
class SecondTypeSerializer(serializers.ModelSerializer):
    …
…

但是我一直收到一个错误:Object of type 'OneType' is not JSON serializable(我理解这个错误意味着我需要将模型序列化为JSON,但是我认为模型会调用模型的序列化程序….)

由于DRF视图集的内部工作方式,堆栈跟踪似乎没有什么帮助,但这里是:

/usr/local/Cellar/python/3.6.5_1/Frameworks/Python.framework/Versions/3.6/lib/python3.6/json/encoder.py in default
            else:
                return list(iterable)
            # Let the base class default method raise the TypeError
            return JSONEncoder.default(self, o)
    """
    raise TypeError("Object of type '%s' is not JSON serializable" %
                    o.__class__.__name__) ...
def encode(self, o):
    """Return a JSON string representation of a Python data structure.
    >>> from json.encoder import JSONEncoder
    >>> JSONEncoder().encode({"foo": ["bar", "baz"]})

▼ Local vars
Variable    Value
o           <OneType: AssetName - Type 1 : Account 2>
self        <rest_framework.utils.encoders.JSONEncoder object at 0x11dce1668>

在Viewsets.py公司名称:

class AssetViewSet(viewsets.ModelViewSet):
    """
    This viewset automatically provides `list`, `create`, `retrieve`, `update` and `destroy` actions.
    """
    serializer_class = AssetSerializer
    permission_classes = (permissions.IsAuthenticated, IsOrganizationMember,)

    def get_queryset(self):
        slug = self.kwargs['slug']
        return Account.objects.filter(slug=slug)

另外,这更像是一个DRF问题(我没有使用正确的queryset)还是python问题(我没有为对象/类提供可序列化的方法/类)?在


Tags: of模型selfjsonmodelreturn序列化def