Ich habe ein Inline-formset von diesem accepted answerDjango Inline-Formularsatz, das kein Zwischenmodell ohne pk löscht?
implementiert ich ein Problem habe, wenn nämlich die formset Speichern es keine Datensätze löschen nicht
Wir haben es in den formsets save method
verfolgen können:
def form_valid(self, form):
'''Handle saving of the project membership formset
'''
context = self.get_context_data()
project_memberships = context['projectmembership_formset']
if project_memberships.is_valid():
self.object = form.save()
project_memberships.instance = self.object
project_memberships.save()
Und wenn wir tiefer in die save
Methode gehen, erhalten wir:
def save_existing_objects(self, commit=True):
self.changed_objects = []
self.deleted_objects = []
if not self.initial_forms:
return []
saved_instances = []
forms_to_delete = self.deleted_forms
for form in self.initial_forms:
obj = form.instance
# If the pk is None, it means either:
# 1. The object is an unexpected empty model, created by invalid
# POST data such as an object outside the formset's queryset.
# 2. The object was already deleted from the database.
if obj.pk is None:
continue
if form in forms_to_delete:
self.deleted_objects.append(obj)
self.delete_existing(obj, commit=commit)
elif form.has_changed():
self.changed_objects.append((obj, form.changed_data))
saved_instances.append(self.save_existing(form, obj, commit=commit))
if not commit:
self.saved_forms.append(form)
return saved_instances
Was ich finde ist, dass die pk
der obj
leer ist und daher keine Löschung jemals passiert.
POST
Daten:
'projectmembership_set-0-id': [
'8'
],
'projectmembership_set-0-user': [
'1'
],
'projectmembership_set-0-is_project_manager': [
'on'
],
'projectmembership_set-0-full_time_equivalent': [
'100.00'
],
'projectmembership_set-0-DELETE': [
'on'
],
'projectmembership_set-1-id': [
'9'
],
'projectmembership_set-1-user': [
'3'
],
'projectmembership_set-1-is_project_manager': [
'on'
],
'projectmembership_set-1-full_time_equivalent': [
'100.00'
],
'projectmembership_set-1-DELETE': [
'on'
],
'projectmembership_set-2-id': [
'10'
],
'projectmembership_set-2-user': [
'7'
],
'projectmembership_set-2-full_time_equivalent': [
'50.00'
],
'projectmembership_set-2-DELETE': [
'on'
],
Warum die Objekte nicht pk
haben und gelöscht werden, nicht wahr?