Неожиданное поведение DRF в методе API PUT при передаче значения объекту
У меня есть модель, и я пытаюсь создать API с методом PUT для обновления значений.
Однако, когда я отправляю запрос с помощью postman, все значения возвращаются завернутыми внутрь ( ,).
Например, если я передаю данные JSON
{
"name" = "MyName"
}
и затем в API в методе PUT
data = request.data
animal.name = data['name']
возвращаемое значение для animal.name - ( MyName,) (оно сохраняется в базе данных в таком виде), что не является тем, что я передал/ожидаю (я ожидал MyName).
Я использовал print (data['name'], animal.name) для подтверждения того, что данные JSON получены правильно, и это так (вывод на печать MyName, ( MyName,) . Таким образом, проблема находится внутри API.
У меня есть ощущение, что это может быть связано с sex = model.ChaerField(choices=...), поскольку я впервые использую этот метод.
Я был бы очень признателен за помощь в понимании того, почему это происходит и как это решить.
Ниже приведено мое определение сериализатора модели и представления.
models.py
MALE = 'M'
FEMALE = 'F'
SEX_CHOICES = [
(MALE, 'Male'),
(FEMALE, 'Female')
]
class Animal(models.Model):
owner = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, related_name='animal')
farm = models.ForeignKey(Shop, on_delete=models.SET_NULL, null=True, related_name='animal')
custom_uuid = models.CharField(max_length=8, default= null, editable=False)
name = models.CharField(max_length=150, blank=True)
birth_date = models.DateField(null=True, blank=True, verbose_name='Date of birth')
sex = models.CharField(max_length=1, choices= SEX_CHOICES, default=MALE)
def __str__(self):
return '%s , %s' % (self.user, self.uuid)
serializer.py
class AnimalSerializer(serializers.ModelSerializer):
sex = serializers.SerializerMethodField()
class Meta:
model=Animal
fields = '__all__'
def get_sex(self,obj):
return obj.get_sex_display()
views.py
@api_view(['PUT'])
@permission_classes([IsAuthenticated])
def updateAnimal(request, pk):
user = request.user
animal = Animal.objects.get(id=pk)
data = request.data
animal.name = data['name'],
print (data['name'], animal.name)
animal.save()
serializer = AnimalSerializer(animal, many=False)
return Response(serializer.data)
Я был бы очень признателен за помощь в понимании того, почему происходит так, что мои значения возвращаются обернутыми вокруг ( ,) и как это решить.