2017-07-20 1 views
4

Ich war im Ergebnis this question die Suche nach einem bestimmten Verfahren zu einem Modell Eintrag auf der Verknüpfung, aber nicht sicher, dass die Lösung am Ende verwendet wird, ist die elegante ...Link-Funktion zu einem Modell Eintrag

Ich mag Sie haben eine Art Zeiger auf eine bestimmte Methode von einem Modelleintrag in der Datenbank. Dies ist meine Idee, wie es geht, aber es scheint abit klobig:

class Results(models.Model): 
    result_ref = models.CharField(...) 
    result_name = models.CharField(...) 
    result_unit = models.CharField(...) 

def result_1_method(): 
    return "My custom result for entry 1" 

... 

>>> results_map = {1: result_1_method, 2: result_2_method, ...} 
>>> required_result = Results.objects.get(results_ref='XAY') 
>>> required_result_method = results_map[required_result.id] 
>>> result = required_result_method() 

Gibt es eine bessere oder häufiger verwendete Lösung? Wie zum Beispiel eine Methode als Teil des DB-Eintrags speichern? Danke :)

Antwort

0

Sie könnten reine Logik verwenden. Dein Weg ist eigentlich der beste Weg, es zu tun. Wenn sich Ihre Referenzen jedoch niemals ändern und vordefiniert sind, können Sie einfach eine Methode verwenden, die ein if, sonst mit der ID verwendet.

if instance.id = 1: 
    logic or method call here 
else if instance.id = 2: 
    different logic or method call here 
... 

Aber nur erkennen, dass dies bedeutet, dass Ihre Fälle/Logik-Referenzen auf diese Weise sind vordefiniert und können sie nie ändern. Wenn Sie also dynamische Referenzen wünschen, ist Ihre Lösung wahrscheinlich der beste Weg, dies zu tun.

+0

Ja ich sehe was du meinst. Ihr Beispiel ist gut, weil es mir erlaubt, den gesamten Code innerhalb der Modellklasse zu behalten, aber wenn ich viele Instanzen habe, wird es ziemlich groß! – DrBuck

+0

Ja, das stimmt. Ich schätze, es hängt nur von den Umständen ab –

Verwandte Themen