Ich schreibe eine Django App für die Verwendung in einem Land, in dem sie Komma als decimal separator verwenden. Ich habe ein Modell, das eine django.db.models.DecimalField
enthält, und ich verwende model forms. Wie kann ich das resultierende Formularfeld mit Komma rendern und das Komma vom Benutzer zurücknehmen?Make Django Formen verwenden Komma als Dezimaltrennzeichen
Nach dem advice von jweyrich, I 1.1 meine Anwendung von Django Upgrade 1.2 Django und bearbeiten meine settings.py
folgendes enthalten:
LANGUAGE_CODE = 'nb'
LANGUAGES = (
('nb', 'Norwegian'),
)
USE_I18N = True
USE_L10N = True
DECIMAL_SEPARATOR = ','
THOUSAND_SEPARATOR = ' '
MIDDLEWARE_CLASSES = (
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.middleware.common.CommonMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
)
Soweit ich sehen kann, ist dies, dass alle the documentation Anrufe zum. Es funktioniert jetzt für Formulare, wenn ich localization=True
auf das Formularfeld einstelle. Es funktioniert jedoch weder in model forms noch in the admin site.
Ich entdeckte eine Django ticket und eine resultierende Django changeset von vor der Version 1.2. Wenn ich sie richtig verstehe, war es früher so, dass die Widgets die Formatlokalisierung automatisch verwendeten, aber nach diesem Patch muss die Lokalisierung explizit aktiviert werden, indem der Schlüsselwortparameter localization=True
dem Formularfeld zugewiesen wird. Gibt es eine Möglichkeit, Admin-Formulare auf ihre Felder localization=True
setzen?
Brillante und elegante Lösung. – scum
Ich würde es vorziehen, ein Mixin zu machen: 'LocalizationMixin (Objekt): ...' und 'FooForm (LocalizationMixin, forms.ModelForm)', so dass Sie z. 'FooForm (LocalizationMixin, floppyforms.ModelForm)' – Webthusiast
Was ist, wenn Sie die Lokalisierung direkt für Models aktivieren möchten? Nicht ModelForms. Anwendungsfall: Anzeigen als Antwort auf AJAX-HTTP-Anforderungs-Buchungsdaten und Speichern dieser Daten (mit Zahlen mit Komma als Tausendertrennzeichen) in einem Modell mit einem Dezimalfeld. Kann dafür keine Lösung finden. – jorgeas80