ich etwas in Django Formularsätze bemerkt habe:Django Formset Sicherheit
Jeder formset.form hat ein verstecktes Feld mit der ID des Modells bearbeitet wird. Alles, was Sie tun müssen, ist diese ID ändern und übermitteln, und die Standard-Formularsatz clean()
oder save()
Methoden nicht ein Auge zuwerfen.
Ich würde denken, dass es nicht zu kompliziert wäre, zu verfolgen, welche Objekte in der ursprünglichen Formset-Abfragegruppe waren, und sie beim Speichern zu vergleichen. Ich frage mich, warum Django das nicht schon tut?
Was mich betrifft, ich bin die Überprüfung von Berechtigungen für formset wie sparen:
if formset.is_valid():
for fs in formset:
report = fs.save(commit=False)
if can_edit(request.user, report):
report.save()
Jeder andere Ankündigung dieses Problem? Ich wäre gespannt, wie Sie es angesprochen haben.
Soweit ich mich erinnere, ist es nicht möglich, ein Objekt mit pk 'y' zu bearbeiten (was nicht im Abfrage-Set ist), indem die versteckte ID von' x' nach 'y' geändert wird. Wenn Sie etwas anderes gefunden haben, denke ich, dass dies ein Sicherheitsproblem ist, und es wäre besser, wenn Sie es privat melden, anstatt auf Stack Overflow zu posten. Ich glaube nicht, dass es einen bestimmten Grund für den derzeitigen Mangel an Fehlermeldung gibt - ich denke, ein Patch wäre willkommen. – Alasdair
Es ist möglich (vorausgesetzt, der 'request.user' hat Bearbeitungsrechte für das Modell). Ich habe es gerade ausprobiert. –
Reguläre Modellformsätze überprüfen "request.user" überhaupt nicht. Sprechen Sie über den Django-Administrator? – Alasdair