django, изменение значений полей в модели перед сохранением в базе данных

#python #django #django-rest-framework

#python #django #django-rest-framework

Вопрос:

список игроков класса (модели.Модель):

 name = models.CharField(max_length=300)
position = models.CharField(max_length=200)
h_code = models.ForeignKey(HList, related_name="h_code", on_delete=models.CASCADE)
d_code = models.CharField(primary_key=True, max_length = 200, editable=False)
  

Serializers.py

 class PlayerSerializer(serializers.ModelSerializer):    
    class Meta:
        fields = ["name", "position", "h_code", "d_code"]
        model = PlayerList
  

view.py

 class PostPlayer(generics.ListCreateAPIView):
    queryset = PlayerList.objects.all().order_by('-d_code')
    serializer_class = PlayerListSerializer

    def get(self, request, *args, **kwargs):
        d_code = request.data.get('h_code')   'test'
        print(d_code)
  

печать (d_code) :

 h000001test
  

При вводе значения через api я хочу реализовать, чтобы введенное значение изменялось на другое значение в view.py и сохраняется в базе данных.

Я хочу сохранить d_code, обработанный def get в БД.

Я не знаю, что делать. Не могли бы вы сообщить мне, пожалуйста?

Ответа нет, поэтому я опубликую снова.

Комментарии:

1. Если вы хотите обновить объект, используйте представление API uodate. Метод Get используется только для отображения данных. Когда вы используете соответствующий updateapiview, вы можете переопределить метод update для обработки аргумента и соответствующего обновления объекта модели. Сообщите, решит ли это вашу проблему.

2. Я знаю, как изменить данные, но я не знаю, как поместить измененные данные в поле модели. Знаете ли вы?

Ответ №1:

Вы можете переопределить свой perform_create() метод views, как указано в документации (возможно, вам придется немного прокрутить его в разделе «Сохранение и удаление«:

 class PostPlayer(generics.ListCreateAPIView):
    queryset = PlayerList.objects.all().order_by('-d_code')
    serializer_class = PlayerListSerializer

    def get(self, request, *args, **kwargs):
        d_code = request.data.get('h_code')   'test'
        print(d_code)
    ...
    ...
    def perform_create(self, serializer):
        d_code = request.data.get('h_code')   'test'
        #do something with d_code
        new_code = d_code   'someSampleValue'
        serializer.save(d_code=new_code)