Доступ к pk из запроса GET возвращает кортеж

#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")

этот ответ может быть полезен или помочь другим с глупой ошибкой.