Django REST, добавить новое поле из значений в списке - PullRequest
0 голосов
/ 13 апреля 2020

В представлении я получаю результат классификатора изображений в виде словаря, содержащего имя животного как ключ и вероятность того, что это правильное животное как value .

{'dog': 0.9, 'wolf': 0.1}

Отсюда я отправляю Response , содержащий всех животных из словаря, которые также есть в Animal Model .

[
{
    'common_name': 'dog',
    'scientific_name' : 'Canis lupus familiaris',
},
]

Я хотел бы добавить значение вероятности для каждого вхождения, содержащегося в словаре:

[
{
    'common_name': 'dog',
    'scientific_name' : 'Canis lupus familiaris',
    'probability' : 0.9,

},
]

Какова будет лучшая стратегия для этого?

Вот я пока что:

Views.py :

class AnimalListCreateAPIView(APIView):
    def get(self,request):
        classifier_result={'dog': 0.9, 'wolf': 0.1}
        list_animals=list(classifier_result.keys())
        animals = Animal.objects.filter(common_name__in=list_animals)
        serializer = AnimalSerializer(animals, many=True)
        return Response(serializer.data)

Serializers.py :

class AnimalSerializer(serializers.ModelSerializer):

    class Meta:
        model= Animal
        fields= [' common_name ',' scientific_name ']

Models.py

class Animal(models.Model):
    common_name = models.CharField(max_length=50)
    scientific_name = models.CharField(max_length=50)

    def __str__(self):
        return self. common_name

1 Ответ

1 голос
/ 13 апреля 2020

Я предпочитаю этот способ. Я уверен, что есть еще

class AnimalSerializer(serializers.ModelSerializer):
    probability = serializers.SerializerMethodField()

    class Meta:
        model= Animal
        fields= ['common_name','scientific_name', 'probability']

    def get_probability(self, obj):
        return self.context['probability'].get(obj.common_name)

...


serializer = AnimalSerializer(animals, many=True, context={'probability': classifier_result})
...