#python #django #get
#python #django #получить
Вопрос:
У меня есть форма поиска, состоящая из 3 полей, которые предоставляют некоторые критерии для возможного запроса к базе данных. Форма отправляется с помощью метода GET .
Одно из полей является ModelChoiceField и отображается как виджет выбора. Значением каждого параметра является первичный ключ связанного объекта — в моем случае первичный ключ по умолчанию, назначенный Django. Насколько я понимаю, это значение является целым числом и превращается в строку в запросе.
Поэтому, на мой взгляд, для обработки данных, которые у меня есть int(self.request.GET.get("name"))
. Однако ошибка, которую я получаю, предполагает, что значение является кортежем:
Поле TypeError ‘id’ ожидало число, но получило (11,).
Приведенное выше исключение (аргумент int () должен быть строкой, байтоподобным объектом или числом, а не «кортежем») было прямой причиной следующего исключения:
Я что-то делаю не так? или иначе, как я могу наилучшим образом получить это значение в виде целого числа, чтобы я мог завершить свой фильтр базы данных: Product.objects.filter(id=product_id)
?
ОБНОВЛЕНИЕ: я добавил в представление метод, который работает, но все еще задаюсь вопросом, есть ли лучший способ?:
def convert_to_int(self, type_tuple):
""" Converts tuple value to integer """
type_int = int(''.join(type_tuple))
return type_int
Комментарии:
1. Когда вы можете сделать что-то вроде
int(self.request.GET.get("name")[0])
2. Вместо этого я ввел метод для его преобразования, поскольку pk может быть одной или несколькими цифрами
Ответ №1:
У меня была эта проблема, и оказалось, что у меня была и дополнительная запятая после моей функции, превращающей оператор в кортеж (очень pythonic 😅)
request.form.get("name"),
должно быть:
request.form.get("name")
этот ответ может быть полезен или помочь другим с глупой ошибкой.