2016-07-29 1 views
1

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?

Antwort

0

haben Sie versucht, return order_sum zu return int(order_sum) zu ändern oder die Logik zu tun, um ein Leerzeichen in Ihrer Funktion get_latest_orders_sum hinzuzufügen. dh

return str(order_sum).replace("," " ") 
+0

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 :( –