Вместо того, чтобы определять его в модели, вы можете напрямую прикрепить эти поля в сериализаторе следующим образом (используя SerializerMethodField ):
class SearchResultSerializer(serializers.ModelSerializer):
sentiment_score = serializers.SerializerMethodField()
sentiment_magnitude = serializers.SerializerMethodField()
class Meta:
model = Search
fields = ('title', 'link', 'snippet', 'description','sentiment_score', 'sentiment_magnitude')
def get_sentiment_magnitude(self, obj):
# call external api with search obj which has been stored in your previous call
return data
def get_sentiment_score(self, obj):
# call external api with search obj which has been stored in your previous call
return data
Обновление
Выможно использовать контекст из любого универсальных представлений или представлений для предварительного заполнения данных.Вы можете попробовать так:
class YourViewSet(ViewSet):
...
def get_serializer_context(self):
context = super(YourViewSet, self).get_serializer_context()
data = get_it_from_api()
context['sentiment_score'] = data.get('sentiment_score')
context['sentiment_magnitude'] = data.get('sentiment_magnitude')
return context
И использовать его в сериализаторе следующим образом:
class SearchResultSerializer(serializers.ModelSerializer):
sentiment_score = serializers.SerializerMethodField()
sentiment_magnitude = serializers.SerializerMethodField()
class Meta:
model = Search
fields = ('title', 'link', 'snippet', 'description','sentiment_score', 'sentiment_magnitude')
def get_sentiment_magnitude(self, obj):
return self.context.get('sentiment_magnitude')
def get_sentiment_score(self, obj):
return self.context.get('sentiment_score')
Кроме того, даже без использования универсальных представлений / viewset вы все равно можете передать дополнительный контекст, например:это SearchResultSerializer(instance, context={'sentiment_magnitude': sentiment_magnitude, "sentiment_score": sentiment_score})
.Пожалуйста см. документацию .