Как удалить или игнорировать объект serializer.data в serializer.py? - PullRequest
0 голосов
/ 09 марта 2020

Мне нужно удалить объект serializer.data в сериализаторе, потому что у меня есть некоторые записи в моей таблице. Но все детали записи присутствуют в другом микросервисе. Когда кто-то позвонил в мой API, мне нужно позвонить в эту службу, чтобы получить данные. Но если запись пуста, мне нужно игнорировать этот объект. Я могу сделать это представление, но это можно сделать в Serializer.py. Проверьте код ссылки:

class CourseSerializer(serializers.ModelSerializer):
    user = serializers.SerializerMethodField()

    def get_user(self, obj):
        token = self.context['request'].META['HTTP_TOKEN']
        username = get_user_details_from_id(str(obj['user']), token, name=1)
        if username:
            return username
        else:
            obj = {}

    class Meta:
        model = Course
        fields = ('user', 'total_score')
[
    {
        "user": "test-User",
        "total_score": 170
    },
    {
        "user": null,
        "total_score": 170
    }
]

               to

[
    {
        "user": "User",
        "total_score": 170
    }
]

Я хочу игнорировать запись в SerializerMethodfield , если имя пользователя пусто

1 Ответ

0 голосов
/ 09 марта 2020

Вы можете переопределить метод .to_representation в сериализаторе.

class CourseSerializer(serializers.ModelSerializer):
    user = serializers.SerializerMethodField()

    def get_user(self, obj):
        token = self.context['request'].META['HTTP_TOKEN']
        username = get_user_details_from_id(str(obj['user']), token, name=1)
        if username:
            return username
        else:
            obj = {}

    class Meta:
        model = Course
        fields = ('user', 'total_score')

    def to_representation(self, instance):
        data = super(CourseSerializer, self).to_representation(instance)
        if not data.get('username'):
            data.pop('username', None)
        return data
...