如何编写一个生成具有不同Meta类的类的类工厂

时间:2015-06-30 15:04:45

标签: python django django-rest-framework metaclass

我正在使用Django和Django休息框架。我想创建一个类工厂,它生成具有不同-- .. owner_id uuid, FOREIGN KEY(owner_id, bill_id) REFERENCES bill(owner_id, bill_id), FOREIGN KEY(owner_id, product_id) REFERENCES product(product_id, product_id), -- .. 类的序列化器类。

Meta

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

1 个答案:

答案 0 :(得分:4)

您可以type使用construct classes dynamically

首先,构建您的Meta类:

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

然后使用此Meta类构建序列化程序类:

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

这应该为您提供工厂运作所需的工具。

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