[Django] #26257: runserver fails with AttributeError when using Meta.ordering = (Lower('myfield'), )

15 views
Skip to first unread message

Django

unread,
Feb 22, 2016, 3:14:02 AM2/22/16
to django-...@googlegroups.com
#26257: runserver fails with AttributeError when using Meta.ordering =
(Lower('myfield'),)
--------------------------------------+-----------------------------------
Reporter: aluminiumgeek | Owner: nobody
Type: Bug | Status: new
Component: Core (System checks) | Version: 1.8
Severity: Normal | Keywords: meta, ordering, lower
Triage Stage: Unreviewed | Has patch: 0
Easy pickings: 0 | UI/UX: 0
--------------------------------------+-----------------------------------
Example model:

{{{
from django.db import models
from django.db.models.functions import Lower


class BaseModel(models.Model)
name = models.CharField(max_length=255)
value = models.CharField(max_length=100)

class Meta:
ordering = (Lower('value'),)
}}}

With this model `manage.py test` command is running OK, but Django
produces this trace when running `manage.py runserver`:

{{{
Performing system checks...

Unhandled exception in thread started by <function wrapper at
0x7f9d9a339488>
Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-
packages/django/utils/autoreload.py", line 229, in wrapper
fn(*args, **kwargs)
File "/usr/local/lib/python2.7/dist-
packages/django/core/management/commands/runserver.py", line 114, in
inner_run
self.validate(display_num_errors=True)
File "/usr/local/lib/python2.7/dist-
packages/django/core/management/base.py", line 469, in validate
return self.check(app_configs=app_configs,
display_num_errors=display_num_errors)
File "/usr/local/lib/python2.7/dist-
packages/django/core/management/base.py", line 482, in check
include_deployment_checks=include_deployment_checks,
File "/usr/local/lib/python2.7/dist-
packages/django/core/checks/registry.py", line 72, in run_checks
new_errors = check(app_configs=app_configs)
File "/usr/local/lib/python2.7/dist-
packages/django/core/checks/model_checks.py", line 28, in check_all_models
errors.extend(model.check(**kwargs))
File "/usr/local/lib/python2.7/dist-packages/django/db/models/base.py",
line 1216, in check
errors.extend(cls._check_ordering())
File "/usr/local/lib/python2.7/dist-packages/django/db/models/base.py",
line 1571, in _check_ordering
fields = {f for f in fields if f != 'pk'}
File "/usr/local/lib/python2.7/dist-packages/django/db/models/base.py",
line 1571, in <setcomp>
fields = {f for f in fields if f != 'pk'}
File "/usr/local/lib/python2.7/dist-packages/django/db/models/base.py",
line 1567, in <genexpr>
fields = (f for f in fields if '__' not in f)
File "/usr/local/lib/python2.7/dist-packages/django/db/models/base.py",
line 1562, in <genexpr>
fields = (f for f in fields if
File "/usr/local/lib/python2.7/dist-packages/django/db/models/base.py",
line 1560, in <genexpr>
fields = ((f[1:] if f.startswith('-') else f) for f in fields)
AttributeError: 'Lower' object has no attribute 'startswith'
}}}

--
Ticket URL: <https://code.djangoproject.com/ticket/26257>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

Django

unread,
Feb 22, 2016, 7:32:49 AM2/22/16
to django-...@googlegroups.com
#26257: Add support for expressions like (Lower('myfield'),) in model Meta.ordering
-------------------------------------+-------------------------------------
Reporter: aluminiumgeek | Owner: nobody
Type: New feature | Status: new
Component: Database layer | Version: 1.8
(models, ORM) |
Severity: Normal | Resolution:
Keywords: meta, ordering, | Triage Stage: Accepted
lower |
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0

Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
Changes (by timgraham):

* needs_better_patch: => 0
* component: Core (System checks) => Database layer (models, ORM)
* needs_tests: => 0
* needs_docs: => 0
* type: Bug => New feature
* stage: Unreviewed => Accepted


Comment:

I don't think there's any documentation or tests in Django's test suite to
suggest that expressions are supported in `Meta.ordering`, but we could
investigate to see if adding that is feasible.

--
Ticket URL: <https://code.djangoproject.com/ticket/26257#comment:1>

Django

unread,
Jun 7, 2016, 12:28:44 AM6/7/16
to django-...@googlegroups.com
#26257: Add support for expressions like (Lower('myfield'),) in model Meta.ordering
-------------------------------------+-------------------------------------
Reporter: aluminiumgeek | Owner: nobody

Type: New feature | Status: new
Component: Database layer | Version: 1.8
(models, ORM) |
Severity: Normal | Resolution:
Keywords: meta, ordering, | Triage Stage: Accepted
lower |
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0

Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------

Comment (by charettes):

This is related to #24747 because the requested feature could be expressed
as `ordering = ['name__lower']` if support for transforms in `order_by()`
lands.

It's worth keeping this ticket open because the `ordering` checks will
need to be adjusted to allow reference to transforms.

--
Ticket URL: <https://code.djangoproject.com/ticket/26257#comment:2>

Django

unread,
Jul 5, 2017, 2:11:01 PM7/5/17
to django-...@googlegroups.com
#26257: Add support for expressions like (Lower('myfield'),) in model Meta.ordering
-------------------------------------+-------------------------------------
Reporter: Mikhail Mezyakov | Owner: nobody

Type: New feature | Status: new
Component: Database layer | Version: 1.8
(models, ORM) |
Severity: Normal | Resolution:
Keywords: meta, ordering, | Triage Stage: Accepted
lower |
Has patch: 1 | Needs documentation: 1
Needs tests: 0 | Patch needs improvement: 0

Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
Changes (by Tim Graham):

* needs_docs: 0 => 1
* has_patch: 0 => 1


Comment:

[https://github.com/django/django/pull/8673 PR] (needs docs)

--
Ticket URL: <https://code.djangoproject.com/ticket/26257#comment:3>

Django

unread,
Sep 5, 2017, 8:16:03 PM9/5/17
to django-...@googlegroups.com
#26257: Add support for expressions like (Lower('myfield'),) in model Meta.ordering
-------------------------------------+-------------------------------------
Reporter: Mikhail Mezyakov | Owner: nobody
Type: New feature | Status: closed

Component: Database layer | Version: 1.8
(models, ORM) |
Severity: Normal | Resolution: fixed

Keywords: meta, ordering, | Triage Stage: Accepted
lower |
Has patch: 1 | Needs documentation: 1
Needs tests: 0 | Patch needs improvement: 0

Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
Changes (by Tim Graham):

* status: new => closed
* resolution: => fixed


Comment:

In 093fd479d6be1790c6dc174f9df3a895b50e8a2f:

Fixed #28335 -- Allowed query expressions in Meta.ordering.

--
Ticket URL: <https://code.djangoproject.com/ticket/26257#comment:4>

Reply all
Reply to author
Forward
0 new messages