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

Popular posts from this blog

javascript - jquery or ashx not working -

opencv - DataType<cv::detail::deriv_type>::depth what is it used for -

python 3.x - Mapping specific letters onto a list of words -