#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)