сделать длину в целочисленном поле django модель - PullRequest
1 голос
/ 29 апреля 2020

my model.py:

from django.core.validators import MinLengthValidator,MaxLengthValidator

    class clients(models.Model):
        client_identity_id = models.IntegerField(validators=[MaxLengthValidator(11),MinLengthValidator(11)], unique=True)

        '
        '

my serializers.py:

class UserSerializer(serializers.ModelSerializer):
    #money = serializers.IntegerField(required=False)
    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')
    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)

my 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_identity_id = 12345678910, он продолжает говорить мне, что "объект типа 'int' не имеет len ()", как я могу это исправить, пожалуйста?

Ответы [ 2 ]

1 голос
/ 29 апреля 2020

A git с 11 цифрами в диапазоне от 10000000000 до 99999999999, поэтому вы можете работать с:

from django.core.validators import MinValueValidator, MaxValueValidator

class clients(models.Model):
        client_identity_id = models.IntegerField(
            validators=[
                <b>MinValueValidator(10_000_000_000)</b>,
                <b>MaxValueValidator(99_999_999_999)</b>
            ],
            unique=True
        )
0 голосов
/ 29 апреля 2020

Ошибка, которую вы получаете, является ошибкой python. Целые числа не являются повторяемыми объектами в python. Я предполагаю, что ваши валидаторы полагаются на метод len (), который работает только с повторяемыми объектами (строки, списки и т. Д. c.). Я рекомендую вам изменить поле на CharField () или создать собственный валидатор, чтобы проверить scientifi c обозначение значения вашего целого числа. Пример. 11 символов, таких как 10000000000, будут 1 x 10 ^ 11. Намек на показатель степени здесь 11. Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...