2 Stimmen

Django inlineformset_factory has_changed() überschreiben, um immer True zurückzugeben

Ich verwende die Funktion inlineformset_factory von Django.

a = get_object_or_404(ModelA, pk=id)

FormSet = inlineformset_factory(ModelA, ModelB)
if request.method == 'POST':
    metaform = FormSet (instance=a, data=request.POST)

    if metaform.is_valid():
        f = metaform.save(commit=False)

        for instance in f:
           instance.updated_by = request.user
           instance.save()
else:
    metaform = FormSet(instance=a)

return render_to_response('nodes/form.html', {'form':metaform})

Wenn ich die Daten ändere, ist alles in Ordnung und alle Daten werden aktualisiert. Wenn ich jedoch keine der Daten ändere, werden die Daten nicht aktualisiert, d. h. nur die geänderten Einträge werden in der for-Schleife gespeichert. Ich denke, das ist sinnvoll, da es keinen Sinn macht, Daten zu speichern, wenn sie sich nicht geändert haben. Ich muss jedoch jedes Objekt im Formular durchlaufen und speichern, unabhängig davon, ob es Änderungen aufweist oder nicht.

Meine Frage ist also, wie ich dies überschreiben, so dass es geht durch und speichert jeden Datensatz, ob es irgendwelche Änderungen oder nicht hat?

Ich hoffe, das macht Sinn

Gracias

3voto

Jordan Reiter Punkte 19699

Inlineformset_factory kann, denke ich, ein Formularobjekt annehmen. Ich glaube, Sie könnten ein forms.ModelForm erstellen und dann ein Feld hinzufügen wie always_update = forms.IntegerField(required=False) und dann in der __init__ Funktion etwas tun wie self.fields['always_update'].initial = int(time.time()) . Ich glaube, dass dies die Aktualisierung erzwingt, aber das müssen Sie selbst testen.

0voto

Daniel Roseman Punkte 565786

Wenn die updated_by Feld für jede ModelB-Instanz, die mit einer bestimmten ModelA-Instanz verknüpft ist, immer gleich sein wird, sollten Sie es dann nicht nur einmal auf der übergeordneten Instanz und nicht auf jedem Kind speichern?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X