Исключение полей истории из истории django simples на методе to_representation в django rest framework

Я использую Django Rest Framework с django-simple-history и в настоящее время я хотел бы вернуть модификации истории в моем Board rest API, в настоящее время это работает хорошо, но я хотел бы скрыть некоторые поля. Вот текущий вывод:

enter image description here

Но мне не нужны id, history_id и т.д.

Моя реализация такая же, как и у александра в этом посте . это мои текущие сериализаторы, где я помещаю историю в мою модель Board

class HistoricalRecordField(serializers.ListField):
    child = serializers.DictField()

    def to_representation(self, data):
        representation = super().to_representation(data.values())
        # i've tried to do it by deleting, but does't work well.
        del representation[0]['history_id']
        return representation


class BoardSerializer(serializers.ModelSerializer):
    history = HistoricalRecordField(read_only=True)

    class Meta:
        model = Board
        fields = '__all__'

Но это не кажется лучшим способом сделать это.

Если у вас есть подсказка о том, как это сделать правильно, я хотел бы знать. Заранее спасибо!

Вы можете попробовать это для history_id, по крайней мере:

def to_representation(self, data):
        representation = super().to_representation(data.values())
        for hist in representation['history']:
            hist.pop('history_id')
        return representation

Я не знаю django-simple-history, поэтому они могут быть лучшими решениями, чем мои.
Однако, вы можете сделать это с более дружественным DRF подходом, просто используя ModelSerializer вместо ListSerializer:

class HistoricalRecordSerializer(serializers.ModelSerializer):

    class Meta:
        model = HistoricalRecords
        fields = ('name', 'description', 'share_with_company', [...]) # Only keep the fields you want to display here


class BoardSerializer(serializers.ModelSerializer):
    history = HistoricalRecordSerializer(read_only=True, many=True)

    class Meta:
        model = Board
        fields = ('name', 'description', 'history', [...]) # Only keep the fields you want to display here
Вернуться на верх