ValueError: Поле 'id' ожидало число, но получило '10.48.38.28'
Я пытался найти с помощью Rest Framework определенный параметр в sqlite, используя django, но получил следующую ошибку:
return int(value)
ValueError: invalid literal for int() with base 10: '10.48.38.28'
The above exception was the direct cause of the following exception:
Traceback (most recent call last):...
ValueError: Field 'id' expected a number but got '10.48.38.28'.
[27/Sep/2022 13:23:59] "GET /sipinterface/?ipHost=10.48.38.28/ HTTP/1.1" 500 155723
МОДЕЛИ
class sipInterface(models.Model):
siRealmId=models.CharField(max_length=75)
siIpAddress=models.CharField(max_length=75)
siPort=models.IntegerField()
siTransportProtocol=models.CharField(max_length=75,null=True)
siAllowAnonymus=models.CharField(max_length=75,null=True)
ipHost = models.ForeignKey(host, on_delete=models.CASCADE)
created=models.DateTimeField(auto_now_add=True)
updated=models.DateTimeField(auto_now_add=True)
class Meta: #nombre sing y plural de musica
verbose_name="sipInterface"
verbose_name="sipInterface"
def __str__(self):
return f"{self.siRealmId},{self.siIpAddress},{self.siPort},{self.siTransportProtocol},{self.siAllowAnonymus},{self.ipHost}"
Далее следует файл Serializers: SERIALIZERS:
from rest_framework import serializers
from .models import sipInterface
class sipInterfaceSerializer(serializers.ModelSerializer):
class Meta:
model=sipInterface
fields=['siRealmId','siIpAddress','siPort','siTransportProtocol','siAllowAnonymus','ipHost']
Файл представления является следующим: VIEW
class sipInterfaceList(generics.ListAPIView):
serializer_class=sipInterfaceSerializer
def get_queryset(self):
queryset = sipInterface.objects.all()
ipHost = str(re.sub(r'/.*',"",self.request.query_params.get('ipHost', None)))
if ipHost is not None:
queryset = sipInterface.objects.filter()
queryset = queryset.filter(ipHost=ipHost) #<--- THE ERROR!
else:
queryset = []
return queryset
class sipInterfaceDetail(generics.RetrieveAPIView):
queryset=sipInterface.objects.all()
serializer_class=sipInterfaceSerializer
def get_queryset(self):
queryset = sipInterface.objects.all()
ipHost = str(re.sub(r'/.*',"",self.request.query_params.get('ipHost', None)))
if ipHost is not None:
queryset = sipInterface.objects.filter()
queryset = queryset.filter(ipHost=ipHost)
else:
queryset = []
return queryset
Я помечаю строку с ошибкой символом #<--- ОШИБКА! Спасибо за помощь
Вы имеете поле ipHost
как ForeignKey
:
ipHost = models.ForeignKey(host, on_delete=models.CASCADE)
Поэтому если вы хотите фильтровать по нему, то вам нужно передать его pk
(id
в вашем случае) или искать его поле. Предположим, что ваша модель host
имеет поле ip
, тогда ваш фильтр должен выглядеть следующим образом:
queryset = queryset.filter(ipHost__ip=ipHost)