首页 > 解决方案 > Django Rest 框架:序列化器上的共享字段

问题描述

我有几个序列化器共享一些字段,如 meta_id、category_id 等。

显然,我可以在序列化器上将它们单独声明为 SerializerMethodField,但我想找到一种方法来重用逻辑,或者使用 Mixin、Decorator 或继承。

如何声明基本序列化程序并继承它——同时仍然从 serializers.ModelSerializer 继承?这样我就可以重用 get_meta_id 并确保它显示在字段中?

class Foo(serializers.ModelSerializer, somethingHere?):
    meta_id = Serializers.SerializerMethodField()

class Meta:
    model = Foo
    fields = [...]

    def get_meta_id(self, obj):
        ...

是否可以只将两个参数传递给类

标签: djangodjango-modelsdjango-rest-frameworkdjango-views

解决方案


class BaseSerializer(serializers.ModelSerializer): # The BaseSerializer class inherit everthing from ModelSerializer
    class Meta(serializers.ModelSerializer.Meta): # The BaseSerializer.Meta inherits everything from ModelSerializer.Meta
        def get_meta_id(self, obj):
            return self.meta_id


class Foo(BaseSerializer):
    meta_id = Serializers.SerializerMethodField()

    class Meta(BaseSerializer.Meta): # Here you should get the ModelSerializer.Meta + your custom get_meta_id
        model = Foo
        fields = [...]

推荐阅读