Re: Pagination breaks in ListView after migrating from Django 1.11 to 2.2 with SQLite
Thanks for the help, I have checked those release notes, but I was not able to identify the related change (neither subquery nor __in lookup). I wanted to give you a deeper look into the code, but during that I managed to isolate the issue. It seems that the '__in' lookups previously accepted objects and automatically extracted the referenced columns in case of Foreign Key fields, but that is not valid now. I added `values('id')` everywhere, and it solved the problem. I am not sure how to feel about this change, as 'id' is automatically created. Br, Szabolcs On Tue, Apr 23, 2019 at 4:39 PM Simon Charette wrote: > I assume you are either using a Subquery annotation that returns > multiple results or an __in lookup against a query with multiple columns. > > I vaguely remember something changed in this area but it was documented > in one of the 2.0, 2.1 or 2.2 release notes. > > Best, > Simon > > Le mardi 23 avril 2019 10:31:43 UTC-4, hodossy...@gmail.com a écrit : >> >> Hello, >> >> I am facing the following issue after upgrading to 2.2 from 1.11. Here is >> the stack trace: >> >> Traceback (most recent call last): >> File "(...)\.env\lib\site-packages\django\db\backends\utils.py", line >> 84, in _execute >> return self.cursor.execute(sql, params) >> File "(...)\.env\lib\site-packages\django\db\backends\sqlite3\base.py", >> line 383, in execute >> return Database.Cursor.execute(self, query, params) >> sqlite3.OperationalError: only a single result allowed for a SELECT that >> is part of an expression >> >> The above exception was the direct cause of the following exception: >> >> Traceback (most recent call last): >> File "(...)\dashboard\deployment\tests\test_view.py", line 53, in >> test_display_list_view >> response = self.client.get(self.url_my_list) >> File "(...)\.env\lib\site-packages\django\test\client.py", line 535, in >> get >> response = super().get(path, data=data, secure=secure, **extra) >> File "(...)\.env\lib\site-packages\django\test\client.py", line 347, in >> get >> **extra, >> File "(...)\.env\lib\site-packages\django\test\client.py", line 422, in >> generic >> return self.request(**r) >> File "(...)\.env\lib\site-packages\django\test\client.py", line 503, in >> request >> raise exc_value >> File "(...)\.env\lib\site-packages\django\core\handlers\exception.py", >> line 34, in inner >> response = get_response(request) >> File "(...)\.env\lib\site-packages\django\core\handlers\base.py", line >> 115, in _get_response >> response = self.process_exception_by_middleware(e, request) >> File "(...)\.env\lib\site-packages\django\core\handlers\base.py", line >> 113, in _get_response >> response = wrapped_callback(request, *callback_args, >> **callback_kwargs) >> File "(...)\.env\lib\site-packages\django\views\generic\base.py", line >> 71, in view >> return self.dispatch(request, *args, **kwargs) >> File "(...)\.env\lib\site-packages\django\contrib\auth\mixins.py", line >> 52, in dispatch >> return super().dispatch(request, *args, **kwargs) >> File "(...)\.env\lib\site-packages\django\views\generic\base.py", line >> 97, in dispatch >> return handler(request, *args, **kwargs) >> File "(...)\.env\lib\site-packages\django\views\generic\list.py", line >> 157, in get >> context = self.get_context_data() >> File "(...)\dashboard\deployment\views.py", line 53, in get_context_data >> context = super().get_context_data(**kwargs) >> File "(...)\.env\lib\site-packages\django\views\generic\list.py", line >> 119, in get_context_data >> paginator, page, queryset, is_paginated = >> self.paginate_queryset(queryset, page_size) >> File "(...)\.env\lib\site-packages\django\views\generic\list.py", line >> 69, in paginate_queryset >> page = paginator.page(page_number) >> File "(...)\.env\lib\site-packages\django\core\paginator.py", line 70, >> in page >> number = self.validate_number(number) >> File "(...)\.env\lib\site-packages\django\core\paginator.py", line 48, >> in validate_number >> if number > self.num_pages: >> File "(...)\.env\lib\site-packages\django\utils\functional.py", line >> 80, in __get__ >> res = instance.__dict__[self.name] = self.func(instance) >> File "(...)\.env\lib\site-packages\django\core\paginator.py", line 97, >> in num_pages >> if self.count == 0 and not self.allow_empty_first_page: >> File "(...)\.env\lib\site-packages\django\utils\functional.py", line >> 80, in __get__ >> res = instance.__dict__[self.name] = self.func(instance) >> *File "(...)\.env\lib\site-packages\django\core\paginator.py", line >> 91, in count* >> *return c()* >> File "(...)\.env\lib\site-packages\django\db\models\query.py", line >> 392, in count >> return self.query.get_count(using=self.db) >> File "(...)\.env\lib\site-packages\django\db\models\sql\query.py", line >> 504, in get_count >> number = obj.get_aggregation(using, ['__count'])['__count'] >> File
Re: Pagination breaks in ListView after migrating from Django 1.11 to 2.2 with SQLite
I assume you are either using a Subquery annotation that returns multiple results or an __in lookup against a query with multiple columns. I vaguely remember something changed in this area but it was documented in one of the 2.0, 2.1 or 2.2 release notes. Best, Simon Le mardi 23 avril 2019 10:31:43 UTC-4, hodossy...@gmail.com a écrit : > > Hello, > > I am facing the following issue after upgrading to 2.2 from 1.11. Here is > the stack trace: > > Traceback (most recent call last): > File "(...)\.env\lib\site-packages\django\db\backends\utils.py", line > 84, in _execute > return self.cursor.execute(sql, params) > File "(...)\.env\lib\site-packages\django\db\backends\sqlite3\base.py", > line 383, in execute > return Database.Cursor.execute(self, query, params) > sqlite3.OperationalError: only a single result allowed for a SELECT that > is part of an expression > > The above exception was the direct cause of the following exception: > > Traceback (most recent call last): > File "(...)\dashboard\deployment\tests\test_view.py", line 53, in > test_display_list_view > response = self.client.get(self.url_my_list) > File "(...)\.env\lib\site-packages\django\test\client.py", line 535, in > get > response = super().get(path, data=data, secure=secure, **extra) > File "(...)\.env\lib\site-packages\django\test\client.py", line 347, in > get > **extra, > File "(...)\.env\lib\site-packages\django\test\client.py", line 422, in > generic > return self.request(**r) > File "(...)\.env\lib\site-packages\django\test\client.py", line 503, in > request > raise exc_value > File "(...)\.env\lib\site-packages\django\core\handlers\exception.py", > line 34, in inner > response = get_response(request) > File "(...)\.env\lib\site-packages\django\core\handlers\base.py", line > 115, in _get_response > response = self.process_exception_by_middleware(e, request) > File "(...)\.env\lib\site-packages\django\core\handlers\base.py", line > 113, in _get_response > response = wrapped_callback(request, *callback_args, **callback_kwargs) > File "(...)\.env\lib\site-packages\django\views\generic\base.py", line > 71, in view > return self.dispatch(request, *args, **kwargs) > File "(...)\.env\lib\site-packages\django\contrib\auth\mixins.py", line > 52, in dispatch > return super().dispatch(request, *args, **kwargs) > File "(...)\.env\lib\site-packages\django\views\generic\base.py", line > 97, in dispatch > return handler(request, *args, **kwargs) > File "(...)\.env\lib\site-packages\django\views\generic\list.py", line > 157, in get > context = self.get_context_data() > File "(...)\dashboard\deployment\views.py", line 53, in get_context_data > context = super().get_context_data(**kwargs) > File "(...)\.env\lib\site-packages\django\views\generic\list.py", line > 119, in get_context_data > paginator, page, queryset, is_paginated = > self.paginate_queryset(queryset, page_size) > File "(...)\.env\lib\site-packages\django\views\generic\list.py", line > 69, in paginate_queryset > page = paginator.page(page_number) > File "(...)\.env\lib\site-packages\django\core\paginator.py", line 70, > in page > number = self.validate_number(number) > File "(...)\.env\lib\site-packages\django\core\paginator.py", line 48, > in validate_number > if number > self.num_pages: > File "(...)\.env\lib\site-packages\django\utils\functional.py", line 80, > in __get__ > res = instance.__dict__[self.name] = self.func(instance) > File "(...)\.env\lib\site-packages\django\core\paginator.py", line 97, > in num_pages > if self.count == 0 and not self.allow_empty_first_page: > File "(...)\.env\lib\site-packages\django\utils\functional.py", line 80, > in __get__ > res = instance.__dict__[self.name] = self.func(instance) > *File "(...)\.env\lib\site-packages\django\core\paginator.py", line 91, > in count* > *return c()* > File "(...)\.env\lib\site-packages\django\db\models\query.py", line 392, > in count > return self.query.get_count(using=self.db) > File "(...)\.env\lib\site-packages\django\db\models\sql\query.py", line > 504, in get_count > number = obj.get_aggregation(using, ['__count'])['__count'] > File "(...)\.env\lib\site-packages\django\db\models\sql\query.py", line > 489, in get_aggregation > result = compiler.execute_sql(SINGLE) > File "(...)\.env\lib\site-packages\django\db\models\sql\compiler.py", > line 1097, in execute_sql > cursor.execute(sql, params) > File "(...)\.env\lib\site-packages\django\db\backends\utils.py", line > 67, in execute > return self._execute_with_wrappers(sql, params, many=False, > executor=self._execute) > File "(...)\.env\lib\site-packages\django\db\backends\utils.py", line > 76, in _execute_with_wrappers > return executor(sql, params, many, context) > File "(...)\.env\lib\site-packages\django\db\backends\utils.py", line > 84, in _execute >
Pagination breaks in ListView after migrating from Django 1.11 to 2.2 with SQLite
Hello, I am facing the following issue after upgrading to 2.2 from 1.11. Here is the stack trace: Traceback (most recent call last): File "(...)\.env\lib\site-packages\django\db\backends\utils.py", line 84, in _execute return self.cursor.execute(sql, params) File "(...)\.env\lib\site-packages\django\db\backends\sqlite3\base.py", line 383, in execute return Database.Cursor.execute(self, query, params) sqlite3.OperationalError: only a single result allowed for a SELECT that is part of an expression The above exception was the direct cause of the following exception: Traceback (most recent call last): File "(...)\dashboard\deployment\tests\test_view.py", line 53, in test_display_list_view response = self.client.get(self.url_my_list) File "(...)\.env\lib\site-packages\django\test\client.py", line 535, in get response = super().get(path, data=data, secure=secure, **extra) File "(...)\.env\lib\site-packages\django\test\client.py", line 347, in get **extra, File "(...)\.env\lib\site-packages\django\test\client.py", line 422, in generic return self.request(**r) File "(...)\.env\lib\site-packages\django\test\client.py", line 503, in request raise exc_value File "(...)\.env\lib\site-packages\django\core\handlers\exception.py", line 34, in inner response = get_response(request) File "(...)\.env\lib\site-packages\django\core\handlers\base.py", line 115, in _get_response response = self.process_exception_by_middleware(e, request) File "(...)\.env\lib\site-packages\django\core\handlers\base.py", line 113, in _get_response response = wrapped_callback(request, *callback_args, **callback_kwargs) File "(...)\.env\lib\site-packages\django\views\generic\base.py", line 71, in view return self.dispatch(request, *args, **kwargs) File "(...)\.env\lib\site-packages\django\contrib\auth\mixins.py", line 52, in dispatch return super().dispatch(request, *args, **kwargs) File "(...)\.env\lib\site-packages\django\views\generic\base.py", line 97, in dispatch return handler(request, *args, **kwargs) File "(...)\.env\lib\site-packages\django\views\generic\list.py", line 157, in get context = self.get_context_data() File "(...)\dashboard\deployment\views.py", line 53, in get_context_data context = super().get_context_data(**kwargs) File "(...)\.env\lib\site-packages\django\views\generic\list.py", line 119, in get_context_data paginator, page, queryset, is_paginated = self.paginate_queryset(queryset, page_size) File "(...)\.env\lib\site-packages\django\views\generic\list.py", line 69, in paginate_queryset page = paginator.page(page_number) File "(...)\.env\lib\site-packages\django\core\paginator.py", line 70, in page number = self.validate_number(number) File "(...)\.env\lib\site-packages\django\core\paginator.py", line 48, in validate_number if number > self.num_pages: File "(...)\.env\lib\site-packages\django\utils\functional.py", line 80, in __get__ res = instance.__dict__[self.name] = self.func(instance) File "(...)\.env\lib\site-packages\django\core\paginator.py", line 97, in num_pages if self.count == 0 and not self.allow_empty_first_page: File "(...)\.env\lib\site-packages\django\utils\functional.py", line 80, in __get__ res = instance.__dict__[self.name] = self.func(instance) *File "(...)\.env\lib\site-packages\django\core\paginator.py", line 91, in count* *return c()* File "(...)\.env\lib\site-packages\django\db\models\query.py", line 392, in count return self.query.get_count(using=self.db) File "(...)\.env\lib\site-packages\django\db\models\sql\query.py", line 504, in get_count number = obj.get_aggregation(using, ['__count'])['__count'] File "(...)\.env\lib\site-packages\django\db\models\sql\query.py", line 489, in get_aggregation result = compiler.execute_sql(SINGLE) File "(...)\.env\lib\site-packages\django\db\models\sql\compiler.py", line 1097, in execute_sql cursor.execute(sql, params) File "(...)\.env\lib\site-packages\django\db\backends\utils.py", line 67, in execute return self._execute_with_wrappers(sql, params, many=False, executor=self._execute) File "(...)\.env\lib\site-packages\django\db\backends\utils.py", line 76, in _execute_with_wrappers return executor(sql, params, many, context) File "(...)\.env\lib\site-packages\django\db\backends\utils.py", line 84, in _execute return self.cursor.execute(sql, params) File "(...)\.env\lib\site-packages\django\db\utils.py", line 89, in __exit__ raise dj_exc_value.with_traceback(traceback) from exc_value File "(...)\.env\lib\site-packages\django\db\backends\utils.py", line 84, in _execute return self.cursor.execute(sql, params) File "(...)\.env\lib\site-packages\django\db\backends\sqlite3\base.py", line 383, in execute return Database.Cursor.execute(self, query, params) django.db.utils.OperationalError: only a single result allowed for a SELECT