Динамически создать внутренний класс в классе в Python 3? - PullRequest
0 голосов
/ 08 октября 2019

Для автоматизации API Django я хотел бы динамически генерировать классы ModelSerializer, такие как:

class AppleSerializer(serializers.ModelSerializer):
    class Meta:
        model = Apple
        fields = '__all__'

class BananaSerializer(serializers.ModelSerializer):
    class Meta:
        model = Banana
        fields = '__all__'

Создать обычный класс довольно просто (см. Ниже). Как вы динамически создаете внутренний класс Meta ??

for serialmodel in ['Apple', 'Banaba']:
        class_name = serialmodel + 'Serializer'
        globals()[class_name] = type(class_name, (serializers.ModelSerializer,), {})

1 Ответ

0 голосов
/ 08 октября 2019

Найден ответ:

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, })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...