Как проверить query_params?
Как я могу проверить query_params? Я предоставил ответ и запрос, но он все равно не работает. Первоначально ошибка выглядела следующим образом:
price = int(self.context.get('request').query_params.get('price', None))
AttributeError: 'NoneType' object has no attribute 'query_params'
test_api.py
class IpotekaApiTestCase(APITestCase):
def setUp(self) -> None:
self.offer_1 = Ipoteka.objects.create(bank_name='test',
term_min=1,
term_max=3,
rate_min=1.5,
rate_max=4.8,
payment_min=12345,
payment_max=123456)
self.offer_2 = Ipoteka.objects.create(bank_name='test_1',
term_min=1,
term_max=3,
rate_min=1.5,
rate_max=4.8,
payment_min=12345,
payment_max=123456)
def test_get(self):
url = reverse('offer-list')
response = self.client.get(url)
view = IpotekaModelViewSet.as_view({'get': 'list'})
request = RequestFactory().get('/')
context = {'request': view(request), 'response': response}
serializer_data = IpotekaSerializer([self.offer_1, self.offer_2],
context=context, many=True).data
self.assertEqual(status.HTTP_200_OK, response.status_code)
self.assertEqual(serializer_data, response.data['results'])
serializers.py
def get_payment(self, obj) -> int:
try:
price = int(self.context.get('request').query_params.get('price', None))
deposit = int(self.context.get('request').query_params.get('deposit',
None))
term = int(self.context.get('request').query_params.get('term', None))
if price == 0 or term == 0:
return 0
return self._get_offer_result(price, deposit, term, obj)
except (ValueError, TypeError):
return 0
Получил эту ошибку:
File "D:\Work\Django\Test_ipoteka\ipoteka\serializers.py", line 22, in get_payment
price = int(self.context.get('request').query_params.get('price', None))
AttributeError: 'Response' object has no attribute 'query_params'
----------------------------------------------------------------------
Ran 1 test in 0.014s
FAILED (errors=1)
Я также удалил ответ, но это не помогло
Думаю, вы можете задать параметры запроса следующим образом.
def test_get(self):
url = reverse('offer-list')
response = self.client.get(url, { 'price': ..., 'deposit': ..., 'term': ... })
...
Я пишу тестовый пример моего проекта и в каждом моем приложении используется queryparms, так что в основном query parms используется в моих представлениях
employee_id = self.request.query_params.get('employee_id', None)
и я передаю это таким образом в моем тестовом примере
url = f'/api/v1/education_information/?employee_id={self.employee.id}'
f'/api/v1/education_information/' это базовый url и оставшаяся часть - это параметры запроса, которые я передал