0

Ich habe einen Fall, wo ich zuerst einen Wert von einer Objektinstanz holen muss und dann mit einem anderen Wert multiplizieren und dann einen anderen Wert vom Original subtrahieren. Ist es in Ordnung, wenn ich mehrere Filter verwende? Hier ist eine kurze Demonstration meiner Anfrage.Ist es ratsam, mehrere Django-Filter zu verwenden?

Ich habe folgende Filter in template_filters.py:

1) add(): 
2) subtract(): 
3) multiply(): 
4) calculate_emi(): 

ich folgende Operation tue. Say Darlehen ist eine Objektinstanz:

{{ loan|calculate_emi|multiply:loan.duration|subtract|paid_emi }} 

Ist es in Ordnung, solche kaskadierten Filter zu verwenden? Wenn es einen anderen besseren Ansatz gibt, schlagen Sie bitte vor.

Antwort

0

Ich habe diese Art von Problem in der Vergangenheit aufgetreten. Wenn Sie wie gewohnt mehrere Filter verwenden, kann das ziemlich verwirrend werden.

Eine Lösung könnte sein, eine Modellfunktion zu deklarieren. Dies ist nur möglich, wenn Sie nicht auf Attribute eines anderen Modells angewiesen sind.

Beispiel:

class Loan(models.Model): 
    duration = models.IntegerField() 
    emi = models.IntegerField() 

    def duration_times_emi(self): 
     return self.duration * self.emi 

Diese Funktion kann auf dem Modellinstanz in der Vorlage aufgerufen werden:

{{ loan.duration_times_emi }} 

Auch dies wird nur für Sie nützlich sein, wenn Sie den Zugriff auf alle haben die Variablen Sie brauchen auf der Ebene des Kreditmodells.

+0

Lesbarkeit ist kein Problem für mich, ich bin mehr besorgt über die beispiellosen Fehler in der Funktionalität. Anstatt ein Modell zu erstellen, würde ich lieber dasselbe in der Ansicht tun und es an die Vorlage senden. Was denken Sie? –

+0

Wenn es sich um einen einmaligen Fall handelt und Sie diesen Code an keiner anderen Stelle wiederholen müssen, können Sie den Wert in der Ansicht berechnen und an die Vorlage senden. Ich schätze, das ist deine Lösung! Lass es mich wissen, wenn du einen besseren Weg gefunden hast .. – zubhav