Ich bin auf ein seltsames Verhalten der Django-Formatierung gestoßen. Am besten durch ein Beispiel beschrieben:Formatierte berechnete Felder in Django, um Leerzeichen als Dezimal tausend Trennzeichen zu haben
Modell:
class MyModel(models.Model):
value= models.DecimalField(max_digits=8, decimal_places=2)
my_template.html:
{% load humanize %}
{{calculated_sum|floatformat|intcomma}} # improperly formatted (commas instead of spaces)
{{some_qs.0.value|floatformat|intcomma}} #properly formatted (spaces instead of
#commas as thousand separator
Ansicht, die die Vorlage verwendet einen HTML-Inhalt für eine E-Mail zu generieren:
some_qs = MyModel.objects.all()
calculated_sum= legal_entity_own_instance.get_latest_orders_sum()
context = Context({'calculated_sum':calculated_sum, 'some_qs':some_qs})
html_content = render_to_string('my_template.html', context)
Aus irgendeinem Grund ist some_qs.0.value
wie erwartet formatiert (mit Leerzeichen anstelle von Kommas als a Tausendertrennzeichen). 12345 rendert als 12 345. Aber das seltsame Denken ist, dass calculated_sum
mit Kommas formatiert ist (12345 ist als 12,345 formatiert).
Definition von get_latest_orders_sum:
def get_latest_orders_sum(self):
qs = MyModel.objects.filter(...).aggregate(Sum('value'))
order_sum = qs['value__sum']
return order_sum
Wer weiß, was der Grund für falsche Formatierung sein könnte?
Nun, ich möchte ersetzen Ansatz zu vermeiden, da es nicht scheint eine saubere Lösung für mich angesichts der eingebauten Django-Tools (dh Filter). Wie bei der expliziten int-Konvertierung ist es tatsächlich dezimal (wie Sie aus dem bereitgestellten Modell sehen können) - und ich WÜNSCHE, dass es dezimal ist. Sie könnten argumentieren, dass die Funktion eine Zeichenfolge zurückgibt (ich hatte Zweifel daran). Aber ich habe es überprüft - seine Dezimalzahl. Und das macht mich verwirrt. Zwei Variablen des gleichen Typs werden an die Vorlage übergeben und einer von ihnen rendert wie erwartet, während der zweite nicht :( –