如何编写一个 class 工厂,用不同的 Meta classes 生成 classes

How to write a class factory that produces classes with different Meta classes

我将 Django 与 Django 休息框架一起使用。我想创建一个 class 工厂,它生产具有不同 Meta classes.

的序列化器 classes
class MarksSerializer(serializers.ModelSerializer):
    class Meta:
        model = Marks
        fields = (
            'english',
            'maths',
            'science',
        )
        read_only_fields = (
            'maths',
        )

我想根据传递给工厂的参数改变只读字段和字段元组。请指点我正确的方向

您可以使用 typeconstruct classes dynamically

首先,构建你的 Meta class:

Meta = type('Meta', (object,), {'model': Marks, 'fields': fields, 'read_only_fields': 'read_only_fields'})

然后使用这个 Meta class 构建你的序列化器 class:

MySerializer = type('MarksSerializer', (serializers.ModelSerializer,), {'Meta': Meta})

这应该会为您提供使您的工厂发挥作用所需的工具。

另一种选择是覆盖序列化程序的 __init__ 方法并在序列化程序初始化时修改字段。 DRF docs.

中有一个这样的例子