def object_list_form( request, object_type_plural, return_message=None, embed=False): context = RequestContext(request) ModelClass = Base.get_model(model_name_plural=object_type_plural) template_name = 'profile/%s.html' % ModelClass.model_name_plural.replace( ' ', '-') r = request.POST or request.GET objects = ModelClass.objects.get_objects( user=request.user, request=request, context=context ) #return HttpResponse(objects.query) per_page = 10 def getModelClassFormSet(**kwargs): # uses Django 1.2 workaround documented here: # https://groups.google.com/forum/?fromgroups=#!topic/django-users/xImbCAbmfuc from django.forms.models import modelformset_factory def create_formfield(f, **kwargs): return f.formfield(**kwargs) return modelformset_factory( ModelClass, max_num=0, formfield_callback=create_formfield, **kwargs ) ModelClassFormSet = getModelClassFormSet( form=ModelClass.inline_form( request.user)) if request.method == "POST": modelformset = ModelClassFormSet( request.POST, queryset=objects) # objects if modelformset.is_valid(): num_updates = 0 for form in modelformset.forms: if form.has_changed(): instance = form.instance instance.last_updated_by = request.user instance.time_stamp = datetime.now() instance.save() num_updates += 1 if num_updates > 0: context.update({'message': '%s %s have been updated' % ( num_updates, ModelClass.model_name_plural)}) else: context.update({'warning_message': '%s %s have been updated' % ( num_updates, ModelClass.model_name_plural)}) else: context.update({ 'error_message': 'There was an error updating the %s' % ModelClass.model_name_plural }) else: start = 0 if r.get('page') is not None: start = (int(r.get('page')) - 1) * per_page # Hack: somehow, calling the ".all()" method slices the queryset (LIMIT BY), # rather than converting the queryset to a list (which we don't want). modelformset = ModelClassFormSet( queryset=objects[ start:start + per_page]) #modelformset = ModelClassFormSet(queryset=objects[start:start+per_page]) context.update({ 'formset': modelformset, 'embed': embed, 'page_title': 'My %s' % ModelClass.model_name_plural.capitalize(), 'username': request.user.username, 'url': '%s?1=1' % ModelClass.listing_url(), 'delete_url': ModelClass.batch_delete_url(), 'create_url': ModelClass.create_url() + 'embed/', 'page_title': 'My %s' % ModelClass.model_name_plural.capitalize(), 'user': request.user, 'object_name_plural': ModelClass.model_name_plural, 'object_type': ModelClass.model_name }) if context.get('filter_fields'): context.update({'url': '%s?query=%s' % (ModelClass.listing_url(), context.get('sql')), }) else: context.update({ 'filter_fields': ModelClass.get_filter_fields(), 'sql': '', 'has_filters': False }) context.update(prep_paginator(request, objects, per_page=per_page)) if request.user.is_superuser: context.update({'users': Project.get_users()}) return render_to_response(template_name, context)