2017-02-24 2 views
0

Ich habe eine Website, die verschiedene Anstiege katalogisiert. Diese Anstiege weisen Schwierigkeitsgraden auf, die nicht-ganzzahlige Werte sind. Die Benutzer können auch Bewertungen der ausgewählten Anstiege einreichen und ihren eigenen Schwierigkeitsgrad zuweisen. Ich möchte diesen Schwierigkeiten ganzzahlige Werte zuweisen, sie mitteln und dann das Ergebnis in Bezug auf das Grading-System ausgeben können.Integer-Wert nicht-ganzzahligen Feldern zuweisen Django Models

Zum Beispiel, wenn das Bewertungssystem 5.1, 5.2, 5.3 ... 5.9, 5.10, 5.10a, 5.10b usw. geht. Wie weise ich jedem dieser Felder einen ganzzahligen Wert zu, damit ich sie mitteln kann später?

class Climb(models.Model): 
    GRADES = (
     ('5.15', '5.15'), 
     ('5.14', '5.14'), 
     ... (more difficulties here) 
     ('5.1', '5.1'), 
    ) 
    name = models.CharField(max_length=255, unique=True) 
    grade = models.CharField(max_length=255, choices=GRADES) 
    date = models.DateTimeField(auto_now_add=True) 
    def __str__(self): 
     return "%s %s" % (self.name, self.grade) 

Ich habe versucht, die folgenden:

class Climb(models.Model): 
    GRADES = (
     ('20', '5.15a'), 
     ('19', '5.14d'), 
     ('18', '5.14c'), 
     ... 
     ('1', '5.1'), 
    ) 

aber lief in Probleme später, weil ich eine andere Form haben, wo Anwendungen den Aufstieg auswählen können, und der Aufstieg sollte im Idealfall als „Climb_name climb_grade“ anzuzeigen, in dem climb_grade ist "5.15a" oder "5.9" oder was auch immer, sondern stattdessen als "20" oder "10" oder welche Ganzzahl ich an dieser Schwierigkeit angebracht hatte.

Irgendwelche Ideen?

Antwort

1

Wenn Ihr Nummerierungssystem für Sie funktioniert und Sie nur besorgt sind, dass der Benutzer die richtige Steigung nicht sieht, hat Django einen kleinen Helfer für die Anzeige in den Vorlagen. Hoffentlich ist das was du suchst!

Form: ClimbForm.get_grade_display()

Vorlage: {{ climb.get_grade_display }}

+0

Dies scheint, wie es den Trick tun würde! Schwierigkeiten bei der Implementierung. Können Sie bei der Fehlerbehebung helfen? In der Form, in der Benutzer Bewertungen des Aufstiegs einreichen, wenn sie den Aufstieg wählen, rufen sie das Feld __str__ aus dem Modell an. Also die Anzeige ist "Self.name, self.grade", die den Integer-Wert anzeigt. Ich habe versucht, das in self.grade_display zu ändern, aber das hat nicht funktioniert (gibt kein grade_display-Attribut zurück). – Josh

+0

Vergesst, änderte es in '% s% s'% (self.name, self.get_grade_display()) und das hat den Trick gemacht. Vielen Dank!! – Josh

+0

Entschuldigung, ich habe deinen Kommentar nicht früher gesehen, froh, dass du es herausgefunden hast! – cpett

Verwandte Themen