ich arbeite an einer Django-Anwendung, die nur von deutschsprachigen Usern genutzt werden soll.
Felder für Geldbeträge (DecimalField) sollen in der Benutzeroberfläche immer ein Komma als Dezimaltrennzeichen haben.
Dieses Verhalten soll unabhängig von Einstellungen am Client-System sein.
Der Output von Zahlen funktioniert.
Problem:
Der Form-Input funktioniert nicht.
Wenn ich eine Dezimalzahl eingebe, komme ich aus der Edit-Maske nicht hinaus.
Eingaben mit Punkt als Dezimaltrennzeichen werden angenommen.
django.middleware.locale.LocaleMiddleware
Wenn ich das richtig verstehe, dient das dem Wechseln zwischen verschiedenen Lokalisierung und ist in meinem Fall unnötig.
Settings
Code: Alles auswählen
LANGUAGE_CODE = 'de-de'
USE_I18N = True
USE_L10N = True
DECIMAL_SEPARATOR = ','
Code: Alles auswählen
class Product(models.Model):
designation = models.CharField(max_length=100, blank=False,
verbose_name='Bezeichnung')
price = models.DecimalField(max_digits=8, decimal_places=2, blank=False,
verbose_name='Preis')
def get_absolute_url(self):
return reverse('product_detail', kwargs={'pk': self.pk})
Code: Alles auswählen
class ProductForm(forms.ModelForm):
class Meta:
model = Product
fields = '__all__'
localized_fields = '__all__'
View
Code: Alles auswählen
class ProductUpdateView(UpdateView):
model = Product
template_name = 'product_edit.html'
fields = '__all__'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
print(self.object)
context['form'] = ProductForm(instance=self.object)
return context
Code: Alles auswählen
{% extends "base.html" %}
{% block content %}
{% load i18n %}
{% load l10n %}
<h1>Edit product</h1>
<div>ID: {{product.id}}</div>
{% localize on %}
{{ form.non_field_errors }}
<form action="" method="post">{% csrf_token %}
{{ form.as_div }}
<input type="submit" value="Speichern">
</form>
{% endlocalize %}
{% endblock content %}
Wäre für einen hilfreichen Tipp sehr dankbar.
Grüße Gerald