However, I think the maintainer is right and it's a Django bug: because of
the new feature allowing to customize the "empty choice", the lazy
translation of named groups in a choice list for a modelForm field gets
translated at import time.
The steps to reproduce are in the ticket linked above, and consists in:
- have a choice list for a model field which contains name groups, with
the groups' names being translated (using ugettext_lazy)
- create a ModelForm for this model
- import the ModelForm from an external script that has the settings
configured, but not called `django.setup()` yet
I understand the steps to reproduce are really a corner case and may seem
irrelevant, but this bug means that we might have '''lazy translations
that are translated way to early (at import time) instead of staying
lazy'''.
With the normal Django usage, this will translate too early silently, and
not raise any error exception.
From what I understand, this happens in the code that checks if the choice
(in our case, the name of a group) is the empty choice:
https://github.com/django/django/blob/master/django/db/models/fields/__init__.py#L732
I can imagine two solutions to this issue:
1/ only do the check if the "choice" isn't a group name
2/ do something like `choice is None or isinstance(choice, six.text_type)
and choice == ''`
--
Ticket URL: <https://code.djangoproject.com/ticket/23098>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
* severity: Normal => Release blocker
* needs_better_patch: => 0
* component: Translations => Forms
* needs_tests: => 0
* needs_docs: => 0
* stage: Unreviewed => Accepted
--
Ticket URL: <https://code.djangoproject.com/ticket/23098#comment:1>
* has_patch: 0 => 1
Comment:
PR: https://github.com/django/django/pull/2959
--
Ticket URL: <https://code.djangoproject.com/ticket/23098#comment:2>
* stage: Accepted => Ready for checkin
Comment:
Should the version be 1.7?
--
Ticket URL: <https://code.djangoproject.com/ticket/23098#comment:3>
* version: master => 1.7-rc-1
Comment:
Confirmed it's a regression in 1.7.
--
Ticket URL: <https://code.djangoproject.com/ticket/23098#comment:4>
* status: new => closed
* resolution: => invalid
Comment:
This report seems invalid to me. The reproduction instructions include:
> import the ModelForm from an external script that has the settings
configured, but not called django.setup() yet
But the 1.7 release notes explain that you should call `django.setup()`
before doing anything else.
--
Ticket URL: <https://code.djangoproject.com/ticket/23098#comment:5>
* status: closed => new
* resolution: invalid =>
Comment:
Mmm, regardless, if the translation is resolved at import time, that's
bad. We should at least fix that.
--
Ticket URL: <https://code.djangoproject.com/ticket/23098#comment:6>
Comment (by magopian):
Aymeric, I'm sorry that I confused things by talking about the pytest
usage in the STR, while it actually has nothing to do with the issue. It's
just that I discovered this issue in this particular case, while it was
just "failing" (translating to early) silently otherwise.
As you said, the issue is that the translation is resolved at import time,
and that's the point of this ticket (hence the title), sorry if I made it
harder to understand by providing to much (or confusing) details.
--
Ticket URL: <https://code.djangoproject.com/ticket/23098#comment:7>
* cc: apollo13 (added)
Comment:
https://github.com/django/django/pull/2985 is the new PR
--
Ticket URL: <https://code.djangoproject.com/ticket/23098#comment:8>
* status: new => closed
* resolution: => fixed
Comment:
In [changeset:"2f73b527dda6683868fac2791f7f07ccb01ea0d9"]:
{{{
#!CommitTicketReference repository=""
revision="2f73b527dda6683868fac2791f7f07ccb01ea0d9"
Fixed #23098 -- Checked that lazy choices are not evaluated too soon
Thanks Matthieu Agopian for the report.
}}}
--
Ticket URL: <https://code.djangoproject.com/ticket/23098#comment:9>
Comment (by Florian Apolloner <florian@…>):
In [changeset:"99c2c917c3f859f2cc3fc1f7d5abb72730aa6c48"]:
{{{
#!CommitTicketReference repository=""
revision="99c2c917c3f859f2cc3fc1f7d5abb72730aa6c48"
[1.7.x] Fixed #23098 -- Checked that lazy choices are not evaluated too
soon
Thanks Matthieu Agopian for the report.
Backport of 2f73b527dda6683868fac2791f7f07ccb01ea0d9 from master.
}}}
--
Ticket URL: <https://code.djangoproject.com/ticket/23098#comment:10>