Сериализованный не сохраняет сгенерированное значение в методе создания - PullRequest
0 голосов
/ 28 апреля 2020
# models.py
class clients(models.Model):
    client_id = models.CharField(max_length=8,unique=True, null=False, blank=True,primary_key=True)
    client_identity_id = models.IntegerField(unique=True, null=False, blank=False)
    ...


#serializer.py
class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = clients
        fields = ('client_identity_id','client_id','client_firstname','client_middlename','client_lastname','client_country','money','client_num')
        read_only_fields = ('money',)
        def create(self, validated_data, **kwargs):
            validated_data['client_id'] = ''.join(secrets.choice(string.ascii_uppercase + string.digits) 
                                                  for i in range(8))
            return clients.objects.create(**validated_data)


#views.py :
def post(self,request):
    data=request.data
    serializer = UserSerializer(data=data)
    if serializer.is_valid():
        serializer.save()

        return Response(serializer.data, status=status.HTTP_201_CREATED)
    return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

Когда я делаю запрос на публикацию, он должен генерировать уникальный client_id для пользователя, но он остается нулевым.

Пожалуйста, помогите мне использовать включенный код вместо того, чтобы показывать альтернативные способы установки значения для client_id. Спасибо

1 Ответ

0 голосов
/ 28 апреля 2020

Я выполнил тот же код, и он работал нормально.

serializer =UserSerializer(data={})
assert serializer.is_valid()
obj = serializer.save()
print(obj.client_id)
'6I2N4GC3'

Судя по вашему коду, вы не можете вызывать метод create, потому что он имеет отступ внутри Meta.

class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = clients
        fields = ...

        # Indented inside Meta
        def create(self, validated_data, **kwargs):

    # Should be sibling to Meta
    def create(self, validated_data, **kwargs):
        ...
...