Есть ли другой лучший способ переопределения метода обновления сериализатора модели - PullRequest
0 голосов
/ 04 апреля 2020

Я создал модель Serializer и переопределил методы. Но в этом случае мне нужно сохранять каждый объект сериализатора один за другим ....

Я проверяю, есть ли другие методы

class PetSerializer(ModelSerializer):


    class Meta:
        model = Pet
        exclude = ['name', 'categoty','color','food']

     def update(self, instance, validated_data):
          instance.name = validated_data.get('name', instance.name)
          instance.categoty = validated_data.get('categoty', instance.categoty)
          instance.color = validated_data.get('color', instance.color)
          instance.food = validated_data.get('food', instance.food)
          instance.save()

В этом случае, если у меня 10 полей, мне нужно сохранить одно за другим справа?

Есть ли какой-нибудь другой лучший способ справиться с этим?

1 Ответ

3 голосов
/ 04 апреля 2020

это больше вопрос Python;)

def update(self, instance, validated_data):
    for field_name in ('name', 'category', 'colour', 'food'):
        setattr(instance, field_name, validated_data.get(field_name, getattr(instance, field_name))
    instance.save()

Python позволяет манипулировать атрибутами объекта с помощью getattr и setattr

PS: обратите внимание, что для реляционных данных может потребоваться другая обработка, поскольку они немного сложнее.

...