Десериализация JSON с идентификатором пользователя
Я столкнулся с проблемой при десериализации данных JSON. Одним из полей является customerID, и я не могу найти способ правильно использовать класс Serializer.
Вот мой код:
class UserProfileData(models.Model):
user = models.ForeignKey(get_user_model(), on_delete=models.CASCADE)
captureDateTime = models.CharField(_('Capture datetime'), blank=True, null=True, max_length=100)
class UserProfileDataSerializer(serializers.ModelSerializer):
class Meta:
model = UserProfileData
fields = "__all__"
JSON, который я получаю, выглядит следующим образом:
{ "customerID": "someUUID", "captureDateTime": "..." }
Вот текущее состояние моего представления:
@api_view(['POST'])
def register_profile(request):
data = JSONParser().parse(request)
serializer = UserProfileDataSerializer(data=data)
if serializer.is_valid():
serializer.save()
return JsonResponse(serializer.data, status=201)
return JsonResponse(serializer.errors, status=400)
Произошел сбой со следующей ошибкой:
{'user': [ErrorDetail(string='This field is required.', code='required')]}
Я понимаю, что я что-то упускаю, но не могу понять что... Также, чуть не забыл упомянуть, что объект User имеет поле customerId. Спасибо за помощь.
Вы можете передать аргумент source в поле, чтобы сопоставить его с атрибутом с другим именем. Что-то вроде этого должно работать
class UserProfileDataSerializer(serializers.ModelSerializer):
# May want to use a UUIDField based on your question
# either 'user_id' or 'user' as source
customerID = serializers.CharField(source='user') # 'user'
class Meta:
model = UserProfileData
fields = ('captureDateTime', 'customerID')
Вот рабочая версия:
class UserProfileDataSerializer(serializers.ModelSerializer):
customerId = serializers.SlugRelatedField(source='user', queryset=get_user_model().objects.all(), many=False, slug_field='customerId')
class Meta:
model = UserProfileData
fields = ('captureDateTime', 'customerId')