Python - Django - передать сериализатор и атрибут в качестве аргумента - PullRequest
0 голосов
/ 21 ноября 2018

В настоящее время я имею дело с этим фрагментом:

def to_representation(self, instance):
    representation = super().to_representation(instance)

    representation['categories'] = CategorySerializer(instance.categories, many=True).data

    return representation

Теперь я хотел бы сделать фрагмент

representation['categories'] = CategorySerializer(instance.categories, many=True).data

более общим, чтобы я мог передать любое поле и соответствующий ему сериализаторздесь, например:

representation[config['field']] = config['serializer'](instance[getattr(instance, config['field'])]).data

, но он полностью разбился, кто-нибудь когда-либо имел дело с такой общей установкой?

спасибо и привет!

1 Ответ

0 голосов
/ 21 ноября 2018

вы хотите сделать:

instance[getattr(instance, config['field'])]

это слишком много уровней косвенности, может быть, вы просто захотите сделать:

getattr(instance, config['field'])

вместо этого.Я также хотел бы сохранить ваши элементы конфигурации локально для удобства чтения:

field = config['field']
serializer = config['serializer']
representation[field] = serializer(getattr(instance, field)).data

, что выглядит более читабельным

...