Ошибка при валидации данных в Django REST Framework с использованием метода validate_qr
Я столкнулся с ошибкой TypeError: string indices must be integers, когда пытался провести валидацию данных в Django REST Framework с помощью метода validate_qr. я хочу чтобы метод делал проверку того равно ли значение qr со строкой если нет то он должен вернуть сообщение об ошибке , интерпретатор говорит что строковые индексы должны быть числами , я попробовал перевести строковые числа используя класс int но он продожает возвращать ошибку
from django.db import models
class Category(models.Model):
name = models.CharField(max_length=100)
description = models.CharField(max_length=100)
def __str__(self):
return self.name
class Item(models.Model):
name = models.CharField(max_length=100)
price = models.IntegerField()
qr = models.CharField(max_length=100)
category_id = models.ForeignKey(Category, on_delete=models.CASCADE)
def __str__(self):
return self.name
class CategorySerializer(serializers.ModelSerializer):
class Meta:
model = Category
fields = '__all__'
def validate(self, data):
if "!@#$%^&*" in data["name"]:
raise ValidationError('You cannot use special characters')
return data
class ItemSerializer(serializers.ModelSerializer):
class Meta:
model = Item
fields = ['id', 'name', 'price', 'qr', 'category_id']
def validate_qr(self, data):
cat = data['category']
cat_int = int(cat)
pr = data['price']
pr_int = int(pr)
di = data['id']
di_int = int(di)
# Сравниваем с фактической строкой QR
if data['qr'] != f"{cat_int}C{pr_int}P{di_int}I":
raise serializers.ValidationError("QR код не соответствует стандартам")
return data
class ItemListCreateAPIView(APIView):
def get(self, request):
p = Item.objects.all()
serializers = ItemSerializer(p, many=True)
return Response(serializers.data)
def post(self, request):
print(request.data)
serializers = ItemSerializer(data=request.data)
if serializers.is_valid(raise_exception=True):
serializers.save()
return Response(serializers.data)