我有一些序列化程序,它们共享一些字段,例如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):
...
是否可以仅将两个参数传递给类
您可以创建基本序列化程序,并为其他序列化程序使用继承。例如:
class BaseSerializer(serializers.Serializer):
#your codes and extra fields
test_field = serializer.SerializerMethodField()
def get_test_field(self.obj):
return 'test' # or you can use obj instance here
class ExtendedSerializer(BaseSerializer,serializers.ModelSerializer):
#your extra fields
class Meta:
fields = BaseSerializer.Meta.fields + () # you can add your additional fields here
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