Десериализация 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')
    
Вернуться на верх