Python 3.x 在Python 3中的类中动态创建内部类?
为了自动化Django API,我希望动态生成ModelSerializer类,例如:Python 3.x 在Python 3中的类中动态创建内部类?,python-3.x,django-models,Python 3.x,Django Models,为了自动化Django API,我希望动态生成ModelSerializer类,例如: class AppleSerializer(serializers.ModelSerializer): class Meta: model = Apple fields = '__all__' class BananaSerializer(serializers.ModelSerializer): class Meta: model = Ban
class AppleSerializer(serializers.ModelSerializer):
class Meta:
model = Apple
fields = '__all__'
class BananaSerializer(serializers.ModelSerializer):
class Meta:
model = Banana
fields = '__all__'
创建一个常规类相当简单(见下文)。如何动态地创建内部元类呢
for serialmodel in ['Apple', 'Banaba']:
class_name = serialmodel + 'Serializer'
globals()[class_name] = type(class_name, (serializers.ModelSerializer,), {})
找到了答案:
for serialmodel in ['Apple', 'Banana']:
class_name = serialmodel + 'Serializer'
Meta = type('Meta', (object, ), {'model': globals()[serialmodel], 'fields': '__all__'})
globals()[class_name] = type(class_name, (serializers.ModelSerializer,), {'Meta':Meta, })
如果您在Django中有很多通用模型,则非常有用:)
或者,如果要自动对所有模型执行此操作:
models = dict(apps.all_models['your_django_app'])
for name, model in models.items():
class_name = name[:1].upper() + name[1:] + 'Serializer'
Meta = type('Meta', (object, ), {'model': model, 'fields': '__all__'})
globals()[class_name] = type(class_name, (serializers.ModelSerializer,), {'Meta':Meta, })
它不起作用<代码>类型('Meta',(object,),{'model':模型,'fields':'\uuuuu all\uuuuuuuuuu})失败,出现错误:KeyError:'\uuuu模块