генерация уникального идентификатора (8 цифр) для каждого пользователя - PullRequest
0 голосов
/ 28 апреля 2020

my models.py:

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

my 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')

my 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' ожидал числа, но получил идентификатор встроенной функции", что мне делать? Что я хочу, так это то, что когда я делаю почтовый запрос, он должен сгенерировать уникальный 8-значный идентификатор и сохранить его, и как я могу сгенерировать уникальный 8-значный идентификатор, содержащий буквы и цифры?

Ответы [ 2 ]

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

Создайте одну функцию где-нибудь в своем проекте, чтобы сгенерировать уникальный номер, замените вашу модель чем-то вроде этого и удалите logi c для генерации идентификатора из представлений.

class clients(models.Model):
    client_id = models.IntegerField(unique=True, null=False, blank=False, primary_key=True, default=function_name)
    '
    '
0 голосов
/ 28 апреля 2020

Я думаю, вы найдете ответ по этой ссылке: https://www.google.com/amp/s/www.geeksforgeeks.org/python-string-digits/amp/

Насколько я понял, вы хотите создать случайный идентификатор для каждого клиента. Для этого вы используете функцию create_unique_id, и функция возвращается к идентификатору. В вашем коде отсутствует одна вещь: вы должны присвоить возвращаемое значение переменной, т. Е. customer_id=create_unique_id(). Код должен решить вашу проблему. Пожалуйста, дайте мне знать, сработает ли это.

import random 
import string  
...
def create_unique_id(size):  

    # ascii_letters and digits  

    generate_pass = ''.join([random.choice(string.ascii_uppercase + string.ascii_lowercase +string.digits) for n in range(size)])
    return id  

# Driver Code   

my_id = create_unique_id(8)
...