Django - Ändern eines DB-Elementes erstellt ein neues?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Ich möchte nicht dass ein ORM möglichst wenig tut, ich erwarte nur dass es eben nur Objekte zu Relationen und Relationen zu Objekten mappt. Alles darüberhinaus sollte nur mit explizitem opt-in erfolgen. Wenn ich ein Objekt habe dass einer Zeile in einer Tabelle entspricht und ein Attribut des Objektes verändere, entspricht dies eben einer Veränderung der korrespondieren Spalte, nicht aber Veränderungen auch noch an 25 anderen Zeilen.

Es gibt sicherlich Use Cases, in denen man darüberhinaus auch noch mehr haben möchte als ein Mapping zwischen Objekten und Relationen. Ich kenne auch durchaus Leute die tatsächlich gerne hätten dass die Datenbank zum Implementationsdetail wird, die sich gar nicht mit SQL beschäftigen möchten. Das ist dann aber halt kein ORM mehr, sondern eine (oder mehrere) Abstraktionsschichten höher. Ich denke dies hat auch zum dem NoSQL Hype geführt.

Bei Django möchte man irgendwie beides haben und einfach muss es irgendwie auch sein und dass geht halt nicht sonderlich gut.
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

@Judge: nein, dass soll laut Doku _nicht_ gehen, siehe https://docs.djangoproject.com/en/2.1/r ... rimary-key Django verbietet das Ändern der PK, der ist read-only und es wird automatisch ein neues Objekt angelegt. Ob das "clever" ist oder nicht ist Geschmackssache, aber es ist immerhin so dokumentiert. It's not a bug, it's a feature! ;-)

`unique=True, primary_key=True` ist auch nicht sinnvoll - ein PK muss einmalig sein, sonst wäre es kein PK. Steht auch ein gleicher Stelle in der Doku, dass `primary_key=True` `unique=True` impliziert.

Gruß, noisefloor
Antworten