如何编写一个 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',
)
我想根据传递给工厂的参数改变只读字段和字段元组。请指点我正确的方向
您可以使用 type
到 construct 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.
中有一个这样的例子
我将 Django 与 Django 休息框架一起使用。我想创建一个 class 工厂,它生产具有不同 Meta
classes.
class MarksSerializer(serializers.ModelSerializer):
class Meta:
model = Marks
fields = (
'english',
'maths',
'science',
)
read_only_fields = (
'maths',
)
我想根据传递给工厂的参数改变只读字段和字段元组。请指点我正确的方向
您可以使用 type
到 construct 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.