python - Django: removed object causes IndexError -
i bit confused , need help.
i displaying objects using modelformset, dynamically removing them using ajax , saving of objects again using ajax call. dynamic , page not reloaded @ time.
the problem when django tries save whole formset using ajax alfter object or 2 has been deleted, looks deleted object(s) , raises indexerror: list index out of range, because object(s) isn't @ queryset anymore.
this how displaying , saving formsets (simplified version - think error comes from):
def app(request, slug): topicformset = modelformset_factory(topic, form=topicform, extra=0, fields=('name',), can_delete=true) summaryformset = modelformset_factory(summary, form=summaryform, extra=0, fields=('content',), can_delete=true) tquery = user.topic_set.all().order_by('date') squery = user.summary_set.all().order_by('date') # saving formsets: if request.method == 'post' , request.is_ajax(): # following 2 lines error comes from: t_formset = topicformset(request.post) # formset instance s_formset = summaryformset(request.post) # formset instance s_formset.save() t_formset.save() return render (blah...) this how removing objects (this different view):
def remove_topic(request, slug, id): topic = topic.objects.get(pk=id) summary = summary.objects.get(topic = topic) # foreign key relatonship topic.delete() summary.delete() # ajax stuff.... if request.is_ajax(): return httpresponse('blah..') i have tried placing queryset = tquery , queryset = squery when instantiating t_formset , s_formset, didn't help. should ? using postgres db if that's useful.
the error:
> file "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py", line 115, in get_response response = callback(request, *callback_args, **callback_kwargs) file "/usr/local/lib/python2.7/dist-packages/django/contrib/auth/decorators.py", line 25, in _wrapped_view return view_func(request, *args, **kwargs) file "/home/eimantas/desktop/projects/lynx/lynx/views.py", line 122, in app t_formset = topicformset(request.post, queryset = tquery) file "/usr/local/lib/python2.7/dist-packages/django/forms/models.py", line 441, in __init__ super(basemodelformset, self).__init__(**defaults) file "/usr/local/lib/python2.7/dist-packages/django/forms/formsets.py", line 56, in __init__ self._construct_forms() file "/usr/local/lib/python2.7/dist-packages/django/forms/formsets.py", line 124, in _construct_forms self.forms.append(self._construct_form(i)) file "/usr/local/lib/python2.7/dist-packages/django/forms/models.py", line 468, in _construct_form kwargs['instance'] = self.get_queryset()[i] file "/usr/local/lib/python2.7/dist-packages/django/db/models/query.py", line 198, in __getitem__ return self._result_cache[k] indexerror: list index out of range
this may case of cascaded delete deleting summary object:
when object referenced foreignkey deleted, django default emulates behavior of sql constraint on delete cascade , deletes object containing foreignkey.
https://docs.djangoproject.com/en/dev/ref/models/fields/#django.db.models.foreignkey.on_delete
Comments
Post a Comment