2017-10-22 2 views
1

Ich habe ein Modell, das ein Feld latest hat, um festzustellen, ob eine bestimmte Instanz die neueste Definition ist.Django: Boolesches Feld wird nicht aktualisiert

Wenn ich eine neue Zeile zur Datenbank hinzufüge, möchte ich sicherstellen, dass latest für den bereits vorhandenen Datensatz als falsch markiert wird.

latest_version = Segment.objects.filter(title=title, latest=True).first() 

if latest_version: 
    latest_version.latest = False 
    latest_version.save() 

Dies scheint relativ einfach, aber das latest Feld aktualisiert nicht und bleibt als True.

+0

Haben Sie vor, 'last' anstelle von 'first' zu verwenden? –

+0

Sie aktualisieren nur das erste Vorkommen des Filters, d. H. Segment.objects.filter (title = title, latest = True) .first() 'Sind Sie sicher, dass Sie das gleiche' Segment'-Objekt überprüfen, nach dem Sie gefiltert haben. Sie sollten stattdessen den Filter und die Übereinstimmung versuchen, indem Sie 'id' dieses' Segment'-Dokuments verwenden. Auch vielleicht 'Segment.Objects.Filter (Titel = Titel, letzte = True) .first()' gibt nichts zurück, in diesem Fall gibt es keine Aktualisierung. Insgesamt scheint der Code perfekt und sollte so funktionieren, wie Sie es vorhaben zu arbeiten. –

Antwort

1

Ich denke, Sie suchen nach dem falschen Objekt für das Update. Ich denke, was Sie suchen, ist:

Segment.objects.filter(title=title, latest=True).last() 
+0

Ich beabsichtige nur, dass es eine einzelne Instanz gibt, die meiner Filterabfrage entspricht, also denke ich nicht, dass es einen Unterschied zwischen "first" und "last" machen sollte. Und unabhängig davon, welche Methode ich verwende, ändert sich der Wert von 'instance.latest' nicht (zum Beispiel' print (instance.latest) 'nach' instance.save() 'gibt immer noch den Wert als wahr) – pauld

+0

Ich habe gerade versucht' 'zu verwenden zuletzt "und es hat funktioniert! Also danke, obwohl ich nicht verstehe, warum es funktioniert hat? Jede empfohlene Lesung wäre willkommen! – pauld

+0

Ich hoffe, es hat geholfen. Das Einzige, was du falsch gemacht hast, war, dass du ein Objekt aktualisiert hast und ein anderes angeschaut hast. first() und last() sind einander entgegengesetzt. Und Ihre Situation benötigt zuletzt(). Prost – rajkris

Verwandte Themen