Ich habe ein Modell, das eine Session
(sagen eine Stunde Klasse für Kinder), die eine Reihe von Task
s, die eine Reihenfolge folgen müssen, darstellt. Einfacher zu verstehen:Django - Reorder (update) Objekte mit unique_together = (ForeignKey, IntegerField)
class Task(models.Model):
(...)
order = models.PositiveIntegerField('offset from the beginning of a Session')
session = models.ForeignKey(Session, related_name='tasks')
unique_together = ('session', 'order')
ordering = ('order',)
Say I order
(man stelle sich einen gemeinsamen Drag & Drop-Neuordnungs) einer Sitzung des aktualisieren möchten. Wenn ich also die Reihenfolge einer Aufgabe aktualisieren würde, müsste ich den Rest der Aufgaben neu ordnen, so dass die Eindeutigkeit nicht bremst.
Graphical Beispiel (sagen wir, ich Aufgabe in der zweiten Position zu sein mit pk=5014
wollen (order=1
))
Initial state: Final state:
| pk | order | name | | pk | order | name |
|------|-------|------| |------|-------|------|
| 5011 | 0 | A | | 5011 | 0 | A |
| 5012 | 1 | B | ----> | 5014 | 1 | D |
| 5013 | 2 | C | | 5012 | 2 | B |
| 5014 | 3 | D | | 5013 | 3 | C |
Meine Frage ist, wie es mit Django ORM (wenn möglich) zu aktualisieren oder was ein wäre elegante Weise, es zu tun, da ich nur daran denken kann, die gewünschte Aufgabe mit einer neuen Reihenfolge zu speichern (sagen Sie Ordnung = 50), dann ordnen Sie nacheinander die restlichen Aufgaben neu und ordnen schließlich die gewünschte Reihenfolge der gewünschten Aufgabe zu.
Gibt es so etwas wie ein bulk_update
(Ich fand nichts ähnliches nach einer langen Forschung), die mir erlaubt, die order
Felder für alle Aufgaben zu ändern und dann alle auf einmal zu speichern? Oder muss ich mich um dieses einzigartige Paar kümmern?
Es ist in der Regel am besten bestehenden Lösungen wiederzuverwenden https://github.com/bfirsh/django-ordered-model obwohl es läuft immer noch auf 2 nacheinander speichert: http://dba.stackexchange.com/questions/131118/how-can-i-swap-zwei-Werte-von-bestimmten-Spalte-in-Tabelle-in-Postgres Siehe auch: https://www.djangopackages.com/grids/g/model- ordering/ Am besten wäre es, eine benutzerdefinierte SQL-Abfrage zu schreiben, etwas in der Richtung von http: //dba.stackexchange.com/questions/131118/how-can-i-swap-two-values-from-particular-spalte-in-tabelle-in-postgres Es ist auch eine gute Idee, DB Constraints als Ihre 'unique_together' – seeg
Vielen Dank Wirklich viel, das war, was ich suchte. Ich schaue nach und berücksichtige alle Ideen! – vabada
@seeg Wenn es Ihnen nichts ausmacht Ihren Kommentar als Antwort zu posten, werde ich ihn als akzeptiert markieren, da er mein Problem gelöst hat – vabada