﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
32775	LiveServerTestCase fails when query expressions are used for model ordering	Gergely Kalmár	nobody	"= Reproducing the bug =

Create a `models.py` file as follows:
{{{
#!python
from django.db import models
from django.db.models.functions import Lower


class Order(models.Model):
    id = models.CharField(max_length=10, primary_key=True)

    class Meta:
        ordering = [Lower('id')]


class Offer(models.Model):
    order = models.OneToOneField(Order, primary_key=True, on_delete=models.PROTECT)
}}}

Create a test case:
{{{
#!python
from django.contrib.staticfiles.testing import LiveServerTestCase


class Test(LiveServerTestCase):
    def test_case(self):
        pass
}}}

Run the tests with `./manage.py test`:
{{{
> ./manage.py test
Creating test database for alias 'default'...
Traceback (most recent call last):
  File ""./manage.py"", line 17, in <module>
    main()
  File ""./manage.py"", line 13, in main
    execute_from_command_line(sys.argv)
  File "".../lib/python3.8/site-packages/django/core/management/__init__.py"", line 419, in execute_from_command_line
    utility.execute()
  File "".../lib/python3.8/site-packages/django/core/management/__init__.py"", line 413, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "".../lib/python3.8/site-packages/django/core/management/commands/test.py"", line 23, in run_from_argv
    super().run_from_argv(argv)
  File "".../lib/python3.8/site-packages/django/core/management/base.py"", line 354, in run_from_argv
    self.execute(*args, **cmd_options)
  File "".../lib/python3.8/site-packages/django/core/management/base.py"", line 398, in execute
    output = self.handle(*args, **options)
  File "".../lib/python3.8/site-packages/django/core/management/commands/test.py"", line 55, in handle
    failures = test_runner.run_tests(test_labels)
  File "".../lib/python3.8/site-packages/django/test/runner.py"", line 725, in run_tests
    old_config = self.setup_databases(aliases=databases)
  File "".../lib/python3.8/site-packages/django/test/runner.py"", line 643, in setup_databases
    return _setup_databases(
  File "".../lib/python3.8/site-packages/django/test/utils.py"", line 179, in setup_databases
    connection.creation.create_test_db(
  File "".../lib/python3.8/site-packages/django/db/backends/base/creation.py"", line 90, in create_test_db
    self.connection._test_serialized_contents = self.serialize_db_to_string()
  File "".../lib/python3.8/site-packages/django/db/backends/base/creation.py"", line 136, in serialize_db_to_string
    serializers.serialize(""json"", get_objects(), indent=None, stream=out)
  File "".../lib/python3.8/site-packages/django/core/serializers/__init__.py"", line 129, in serialize
    s.serialize(queryset, **options)
  File "".../lib/python3.8/site-packages/django/core/serializers/base.py"", line 90, in serialize
    for count, obj in enumerate(queryset, start=1):
  File "".../lib/python3.8/site-packages/django/db/backends/base/creation.py"", line 133, in get_objects
    yield from queryset.iterator()
  File "".../lib/python3.8/site-packages/django/db/models/query.py"", line 353, in _iterator
    yield from self._iterable_class(self, chunked_fetch=use_chunked_fetch, chunk_size=chunk_size)
  File "".../lib/python3.8/site-packages/django/db/models/query.py"", line 51, in __iter__
    results = compiler.execute_sql(chunked_fetch=self.chunked_fetch, chunk_size=self.chunk_size)
  File "".../lib/python3.8/site-packages/django/db/models/sql/compiler.py"", line 1162, in execute_sql
    sql, params = self.as_sql()
  File "".../lib/python3.8/site-packages/django/db/models/sql/compiler.py"", line 513, in as_sql
    extra_select, order_by, group_by = self.pre_sql_setup()
  File "".../lib/python3.8/site-packages/django/db/models/sql/compiler.py"", line 56, in pre_sql_setup
    order_by = self.get_order_by()
  File "".../lib/python3.8/site-packages/django/db/models/sql/compiler.py"", line 372, in get_order_by
    resolved = expr.resolve_expression(self.query, allow_joins=True, reuse=None)
  File "".../lib/python3.8/site-packages/django/db/models/expressions.py"", line 247, in resolve_expression
    c.set_source_expressions([
  File "".../lib/python3.8/site-packages/django/db/models/expressions.py"", line 248, in <listcomp>
    expr.resolve_expression(query, allow_joins, reuse, summarize)
  File "".../lib/python3.8/site-packages/django/db/models/expressions.py"", line 678, in resolve_expression
    c.source_expressions[pos] = arg.resolve_expression(query, allow_joins, reuse, summarize, for_save)
  File "".../lib/python3.8/site-packages/django/db/models/expressions.py"", line 578, in resolve_expression
    return query.resolve_ref(self.name, allow_joins, reuse, summarize)
  File "".../lib/python3.8/site-packages/django/db/models/sql/query.py"", line 1754, in resolve_ref
    join_info = self.setup_joins(field_list, self.get_meta(), self.get_initial_alias(), can_reuse=reuse)
  File "".../lib/python3.8/site-packages/django/db/models/sql/query.py"", line 1623, in setup_joins
    path, final_field, targets, rest = self.names_to_path(
  File "".../lib/python3.8/site-packages/django/db/models/sql/query.py"", line 1537, in names_to_path
    raise FieldError(""Cannot resolve keyword '%s' into field. ""
django.core.exceptions.FieldError: Cannot resolve keyword 'id' into field. Choices are: order, order_id
}}}

If there is any workaround that I can use in the meantime please let me know. Thank you!"	Bug	closed	Testing framework	3.2	Normal	fixed			Accepted	0	0	0	0	0	0
