как добавить список ко многим = True сериализатор в Django - PullRequest
0 голосов
/ 07 мая 2019

У меня есть список [1, 2, 3] и набор запросов TestModel

[ {'pk':1,'text':'one'}, {'pk':2,'text':'two'}, {'pk':3,'text':'three'}]

, и у меня есть модель и сериализатор, как следующие

class TestMode(models.Model):
    text = models.CharField(max_length=10)

class TestModelSerializer(serializer.ModelSerializer):
    class Meta:
        model = TestModel
        fields = ('pk', 'text')

Я хочучтобы сделать такие данные, как

[{'pk':1, 'text':'one', 'number':1}, {..., 'number':2}, {..., 'number':3}]

Я делаю другой сериализатор

class WrapperSerializer(serializer.ModelSerializer):
    number = serializer.IntegerField()
    class Meta:
        model = TestModel
        fields = ('pk', 'text')

Я стараюсь, как следовать, но я думаю, что это не круто

serialized_data = TestModelSerializer(qs, many=True).data

for index, data in enumerate(serializerd_data):
    data['number'] = list[index]

serializer = WrapperSerializer(serialized_data, many=True)

Как я могусделай это???у меня нет другой идеи ... пожалуйста, помогите мне

1 Ответ

0 голосов
/ 07 мая 2019

Если вы хотите добавить вычисляемое значение (только для чтения) в ваш сериализатор, у вас есть два варианта:

  • В модели определите @property number:

    @property
    def number(self):
        return self.friends.count()  # or whatever you need to calculate the number
    

    Тогда в вашем сериализаторе вы можете просто использовать number как любое другое поле, но необходимо указать тип сериализатора (например, IntegerField).

  • на сериализаторе используйте SerializerMethodField, как описано здесь :

    number = serializers.SerializerMethodField()
    
    def get_number(self, obj):
        return obj.friends.count()
    
...