2017-04-18 7 views
1

Ich habe eine Klasse, die von BaseInlineFormSet inheirts, wo ich die Methode save() außer Kraft setzen:Django FormSet leere Instanzen zurückgeben

class CustomBaseModelFormSet(BaseInlineFormSet): 
    def save(self, something=None, commit=True, *args, **kwargs): 
     instances = super(CustomBaseModelFormSet, self).save(commit=False) 

aber wenn ich formset.save() aufrufen, neue Objekte mit einem gebundenen zu erstellen und gültiges Formset, die Variableninstanzen sind eine leere Liste!

Warum speichert die save() der Elternklasse nicht? Es gibt keine Spur eines Fehlers.

Ich benutze Python 3 und Django 1.10.5.

+1

Sie setzen Commit auf False, aber ist es wahr irgendwo weiter auf der Straße? – dentemm

+0

Ja. Wenn Commit auf False gesetzt wird, sollten die Instanzen zurückgegeben werden. – pisapapiros

Antwort

0

Es stellte sich heraus, dass in der BaseModelFormSet Klasse gibt es eine save_new_objects() -Methode, die meine Formen hüpfte durch die folgende Überprüfung gespeichert werden:

if not form.has_changed(): 
    continue 

Also, meiner Modelform ich diese Methode überschrieben:

def has_changed(self): 
    return True 

So gibt es immer True zurück und meine Formulare werden gespeichert.

Verwandte Themen