der Aktualisierung Ich habe folgendes ModellDjango neuen Datensatz erstellen, anstatt
class FooBar(models.Model):
FOOBAR_ID = models.AutoField(primary_key=True)
foo = models.CharField(max_length=255)
bar = models.CharField(max_length=255)
Außerdem habe ich ein Formular erstellt, die mir vorhandene Instanzen von FooBar bearbeiten kann. Ich möchte den vorhandenen Datensatz aktualisieren, wenn foo geändert wird, aber einen neuen Datensatz erstellen, wenn der Balken geändert wird.
dachte ich, eine gute Möglichkeit wäre, zu gehen, die speichern Methode außer Kraft zu setzen, da es zusätzliche Abfragen in der Datenbank zu tun haben würde, vermeiden, die ich durch das Hinzufügen der folgenden meiner FooBar Modell getan haben.
__original_bar = None
def __init__(self, *args, **kwargs):
super(FooBar, self).__init__(*args, **kwargs)
self.__original_bar = self.bar
def save(self, force_insert=False, Force_update=False, *args, **kwargs):
if self.bar != self.__original_bar:
super(FooBar, self).save(force_insert=True, force_update=False, *args, **kwargs)
self.__original_bar= self.bar
else:
super(FooBar, self).save(force_insert=False, force_update=True, *args, **kwargs)
Wenn ich foo funktioniert alles einwandfrei aktualisiert werden, aber wenn ich die folgenden Fehler aktualisiere Leisten angezeigt wird:
Key ("FOOBAR_ID") = (2) ist bereits vorhanden.
Ich bin anscheinend völlig falsch was force_insert tut. Wie kann ich es erzwingen, einen neuen Datensatz im Speicher zu erstellen?