ValueError: недопустимый литерал для int() с основанием 10
Я пытаюсь понять, почему у меня возникает эта ошибка для пользовательского текстового поля uuid.
Данные:
{
"contact_uuid": "49548747-48888043",
"choices": "",
"value": "1",
"cardType": "TEXT",
"step": 1,
"optionId": "",
"path": "/app/e120703e-2079-4e5f-8420-3924f9e0b9c8/page1/next",
"title": "Welcome to my app"
}
View: Важный бит здесь - это строка, которая сохраняет данные, так что вы можете просмотреть остальную часть кода.
class NextDialog(generics.GenericAPIView):
permission_classes = (permissions.AllowAny,)
def post(self, request, *args, **kwargs):
data = request.data
contact_uuid = data["contact_uuid"]
step = data["step"]
value = data["value"]
optionId = data["optionId"]
path = get_path(data)
request = build_rp_request(data)
app_response = post_to_app(request, path)
response_data = AppAssessment(contact_uuid, step, value, optionId)
response_data.save()
try:
report_path = app_response["_links"]["report"]["href"]
response = get_report(report_path)
return Response(response, status=status.HTTP_200_OK)
except KeyError:
pass
message = format_message(app_response)
return Response(message, status=status.HTTP_200_OK)
Модель:
class AppAssessment(models.Model):
contact_uuid = models.CharField(max_length=255)
step = models.IntegerField(null=True)
optionId = models.IntegerField(null=True, blank=True)
user_input = models.TextField(null=True, blank=True)
title = models.TextField(null=True, blank=True)
# description = models.TextField(null=True, blank=True)
def __str__(self):
return self.contact_uuid
Когда строка response_data.save() выполняется в представлении, я получаю следующую ошибку:
File "/home/osboxes/ndoh-hub/venv/lib/python3.6/site-packages/django/db/models/fields/__init__.py", line 972, in get_prep_value
return int(value)
ValueError: invalid literal for int() with base 10: '49548747-48888043'
Я думаю, что проблема здесь заключается в порядке аргументов. когда вы вызываете AppAssessment() с позиционными аргументами, порядок аргументов может быть не таким, как вы ожидаете. поэтому вызов AppAssessment() с ключевыми аргументами может решить проблему.
замените эту строку:
response_data = AppAssessment(contact_uuid, step, value, optionId)
с этим:
response_data = AppAssessment(contact_uuid=contact_uuid, step=step, optionId=optionId, user_input=value)
Я не уверен, для какого атрибута вы хотели использовать value, но думаю, что это был user_input.