为每个用户生成唯一的ID(8位数字)

时间:2020-04-27 22:09:03

标签: python django django-rest-framework

我的models.py是:

class clients(models.Model):
    client_id = models.IntegerField(unique=True, null=False, blank=False, primary_key=True)
    '
    '

我的serializers.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','client_id')

我的views.py是:

def post(self,request):
        data=request.data
        serializer = UserSerializer(data=data)
        if serializer.is_valid():
            serializer.save()
            client_A = clients.objects.get(client_identity_id=data['client_identity_id'])
            def create_unique_id():
                id=int(''.join(random.choices(string.digits, k=8)))
                return id
            create_unique_id()
            unique = False
            while not unique:
                if not clients.objects.get(client_id=id):
                    unique = True
                else:
                    create_unique_id()
            client_A.client_id = id
            client_A.save()
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

当我发出发布请求时,它向我显示错误“字段'client_id'需要一个数字,但具有内置函数ID”,我该怎么办? 我想要的是,当我发出发布请求时,它应该生成一个8位数的唯一ID并将其保存,并且如何生成一个包含字母和数字的8长度的唯一ID?

1 个答案:

答案 0 :(得分:0)

在项目中的某处创建一个函数以生成唯一编号,并替换类似的模型,并删除用于从视图生成ID的逻辑。

class clients(models.Model):
    client_id = models.IntegerField(unique=True, null=False, blank=False, primary_key=True, default=function_name)
    '
    '