Исключение полей истории из истории django simples на методе to_representation в django rest framework
Я использую Django Rest Framework с django-simple-history и в настоящее время я хотел бы вернуть модификации истории в моем Board
rest API, в настоящее время это работает хорошо, но я хотел бы скрыть некоторые поля. Вот текущий вывод:
Но мне не нужны 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