2010-09-10 10 views
20

Ich habe ein Modell in Django, das ich nur aktualisieren möchte, das heißt, wenn ich es anrufe und die Daten setze, wird es keinen neuen Datensatz erstellen, nur den vorhandenen aktualisieren. Wie kann ich das machen? Hier ist, was ich habe:Wie aktualisiert man Felder in einem Modell, ohne einen neuen Datensatz in django zu erstellen?

class TemperatureData(models.Model): 
    date = models.DateTimeField() 
    value = models.PositiveIntegerField() 
    alert = models.BooleanField() 

Antwort

40

Wenn Sie eine Modellinstanz aus der Datenbank abrufen, wird diese Instanz beim Aufrufen der Speichermethode immer aktualisiert. Zum Beispiel:

t = TemperatureData.objects.get(id=1) 
t.value = 999 # change field 
t.save() # this will update only 

Wenn Ihr Ziel keine INSERTs ist zu verhindern, dann können Sie die save Methode, Test außer Kraft setzen, wenn der Primärschlüssel vorhanden ist und eine Ausnahme ausgelöst. Siehe folgende für weitere Informationen:

+0

Wie kann man in ManyToMany-Beziehungsfeldern aktualisieren? – Jay

+1

gibt es keine andere Lösung? Dies scheint mehr wie "SELECT/UPDATE" als einfach "UPDATE" – Loic

2

Django hat eine Dokumentation über die auf ihrer Website finden Sie unter: Saving changes to objects. Zusammenfassend:

.. Um Änderungen an einem Objekt zu speichern, das bereits in der Datenbank vorhanden ist, verwenden Sie save().

5

Sie sollten es auf diese Weise tun ideal

t = TemperatureData.objects.get(id=1) 
t.value = 999 
t.save(['value']) 

Dies können Sie angeben, welche Spalte gespeichert werden sollen und Ruhe sind, wie sie links derzeit sind in der Datenbank. (https://code.djangoproject.com/ticket/4102)!

Verwandte Themen