Exemple #1
0
 def get_tablib_queryset(self, request):
     if django.VERSION >= (1, 4):
         cl = ChangeList(request,
             self.model,
             self.list_display,
             self.list_display_links,
             self.list_filter,
             self.date_hierarchy,
             self.search_fields,
             self.list_select_related,
             self.list_per_page,
             self.list_max_show_all,
             self.list_editable,
             self,
         )
         return cl.get_query_set(request)
     else:   
         cl = ChangeList(request,
             self.model,
             self.list_display,
             self.list_display_links,
             self.list_filter,
             self.date_hierarchy,
             self.search_fields,
             self.list_select_related,
             self.list_per_page,
             self.list_editable,
             self,
         )
         return cl.get_query_set()
    def test02_search(self):
        """
        Test full text searching in administration
        """
        request = REQ_FACTORY.get('/admin/admintests/', {'q': 'obsah'})
        # Second argument is admin_site, but it is not used in this test
        model_admin = MultilingualModelAdmin(AdminTests, None)
        kwargs = {'request': request,
                  'model': AdminTests,
                  'list_display': ('__str__', ),
                  'list_display_links': (),
                  'list_filter': (),
                  'date_hierarchy': None,
                  'search_fields': ('translations__title', ),
                  'list_select_related': False,
                  'list_per_page': 100,
                  'list_editable': (),
                  'model_admin': model_admin}
        # This argument was added in Django 1.4
        if get_version() >= '1.4':
            kwargs['list_max_show_all'] = 200

        cl = ChangeList(**kwargs)

        # This argument was added in Django 1.4
        if get_version() >= '1.4':
            queryset = cl.get_query_set(request)
        else:
            queryset = cl.get_query_set()

        self.assertEqual(len(queryset), 1)
        self.assertEqual(queryset[0].description, u'description ěščřžýáíé')
 def test02_search(self):
     """
     Test full text searching in administration
     """
     request = REQ_FACTORY.get('/admin/admintests/', {'q': 'obsah'})
     # Second argument is admin_site, but it is not used in this test
     model_admin = MultilingualModelAdmin(AdminTests, None)
     cl = ChangeList(request, AdminTests, ('__str__', ), (), (), None, ('translations__title', ), False, 100, (),
                     model_admin)
     self.assertEqual(len(cl.get_query_set()), 1)
     self.assertEqual(cl.get_query_set()[0].description, u'description ěščřžýáíé')
def get_change_list_query_set(model_admin, model, request):
    from django.contrib import admin
    from django.contrib.admin.views.main import ChangeList
    a = model_admin(model, admin.site)
    cl = ChangeList(request, a.model, a.list_display, a.list_display_links, a.list_filter,
        a.date_hierarchy, a.search_fields, a.list_select_related, a.list_per_page, a.list_editable, a)
    return cl.get_query_set()
Exemple #5
0
    def test_BooleanFilterSpec(self):
        modeladmin = BoolTestAdmin(BoolTest, admin.site)

        request = self.request_factory.get('/')
        changelist = ChangeList(request, BoolTest, modeladmin.list_display, modeladmin.list_display_links,
            modeladmin.list_filter, modeladmin.date_hierarchy, modeladmin.search_fields,
            modeladmin.list_select_related, modeladmin.list_per_page, modeladmin.list_editable, modeladmin)

        # Make sure changelist.get_query_set() does not raise IncorrectLookupParameters
        queryset = changelist.get_query_set()

        # Make sure the last choice is None and is selected
        filterspec = changelist.get_filters(request)[0][0]
        self.assertEqual(force_unicode(filterspec.title()), u'completed')
        choices = list(filterspec.choices(changelist))
        self.assertEqual(choices[-1]['selected'], False)
        self.assertEqual(choices[-1]['query_string'], '?completed__exact=0')

        request = self.request_factory.get('/', {'completed__exact': 1})
        changelist = self.get_changelist(request, BoolTest, modeladmin)

        # Make sure the correct choice is selected
        filterspec = changelist.get_filters(request)[0][0]
        self.assertEqual(force_unicode(filterspec.title()), u'completed')
        # order of choices depends on User model, which has no order
        choice = select_by(filterspec.choices(changelist), "display", "Yes")
        self.assertEqual(choice['selected'], True)
        self.assertEqual(choice['query_string'], '?completed__exact=1')
Exemple #6
0
    def test_RelatedFilterSpec_ForeignKey(self):
        modeladmin = BookAdmin(Book, admin.site)

        request = self.request_factory.get('/', {'author__isnull': 'True'})
        changelist = ChangeList(request, Book, modeladmin.list_display, modeladmin.list_display_links,
            modeladmin.list_filter, modeladmin.date_hierarchy, modeladmin.search_fields,
            modeladmin.list_select_related, modeladmin.list_per_page, modeladmin.list_editable, modeladmin)

        # Make sure changelist.get_query_set() does not raise IncorrectLookupParameters
        queryset = changelist.get_query_set()

        # Make sure the last choice is None and is selected
        filterspec = changelist.get_filters(request)[0][1]
        self.assertEquals(force_unicode(filterspec.title()), u'author')
        choices = list(filterspec.choices(changelist))
        self.assertEquals(choices[-1]['selected'], True)
        self.assertEquals(choices[-1]['query_string'], '?author__isnull=True')

        request = self.request_factory.get('/', {'author__id__exact': '1'})
        changelist = self.get_changelist(request, Book, modeladmin)

        # Make sure the correct choice is selected
        filterspec = changelist.get_filters(request)[0][1]
        self.assertEquals(force_unicode(filterspec.title()), u'author')
        choices = list(filterspec.choices(changelist))
        self.assertEquals(choices[1]['selected'], True)
        self.assertEquals(choices[1]['query_string'], '?author__id__exact=1')
Exemple #7
0
    def test_BooleanFilterSpec(self):
        modeladmin = BoolTestAdmin(BoolTest, admin.site)

        request = self.request_factory.get('/')
        changelist = ChangeList(
            request, BoolTest, modeladmin.list_display,
            modeladmin.list_display_links, modeladmin.list_filter,
            modeladmin.date_hierarchy, modeladmin.search_fields,
            modeladmin.list_select_related, modeladmin.list_per_page,
            modeladmin.list_editable, modeladmin)

        # Make sure changelist.get_query_set() does not raise IncorrectLookupParameters
        queryset = changelist.get_query_set()

        # Make sure the last choice is None and is selected
        filterspec = changelist.get_filters(request)[0][0]
        self.assertEqual(force_unicode(filterspec.title()), u'completed')
        choices = list(filterspec.choices(changelist))
        self.assertEqual(choices[-1]['selected'], False)
        self.assertEqual(choices[-1]['query_string'], '?completed__exact=0')

        request = self.request_factory.get('/', {'completed__exact': 1})
        changelist = self.get_changelist(request, BoolTest, modeladmin)

        # Make sure the correct choice is selected
        filterspec = changelist.get_filters(request)[0][0]
        self.assertEqual(force_unicode(filterspec.title()), u'completed')
        # order of choices depends on User model, which has no order
        choice = select_by(filterspec.choices(changelist), "display", "Yes")
        self.assertEqual(choice['selected'], True)
        self.assertEqual(choice['query_string'], '?completed__exact=1')
Exemple #8
0
	def changelist_view(self, request, extra_context=None):

		# Admin vs employee changelist view			
		if request.user.is_superuser:
			if 'employee' not in self.list_display: self.list_display += ['employee']
			if 'employee' not in self.list_filter: self.list_filter += ['employee']	
			if 'project__client' not in self.list_filter: self.list_filter += ['project__client']
		else:
			pass


		# Get a query set with same filters as the current change list
		from django.contrib.admin.views.main import ChangeList
		from datetime import timedelta
		cl = ChangeList(request, self.model, self.list_display, self.list_display_links, self.list_filter, self.date_hierarchy, self.search_fields, self.list_select_related, self.list_per_page, self.list_editable, self)
		filtered_query_set = cl.get_query_set()
		hours = timedelta()
		for hour in [entry.hours for entry in filtered_query_set]:
			hours += timedelta(hours=hour.hour,minutes=hour.minute)
		
		seconds = hours.days * 86400 + hours.seconds
		hours, remainder = divmod(seconds, 3600)
		minutes, seconds = divmod(remainder, 60)
		total_hours = '%02d:%02d' % (hours, minutes)
							
		extra = {
			'total_hours': total_hours,
		}

		if extra_context: extra = extra.update(extra_context)
		return super(EntryAdmin, self).changelist_view(request, extra_context=extra)
Exemple #9
0
    def test_RelatedFilterSpec_ForeignKey(self):
        modeladmin = BookAdmin(Book, admin.site)

        request = self.request_factory.get('/', {'author__isnull': 'True'})
        changelist = ChangeList(
            request, Book, modeladmin.list_display,
            modeladmin.list_display_links, modeladmin.list_filter,
            modeladmin.date_hierarchy, modeladmin.search_fields,
            modeladmin.list_select_related, modeladmin.list_per_page,
            modeladmin.list_editable, modeladmin)

        # Make sure changelist.get_query_set() does not raise IncorrectLookupParameters
        queryset = changelist.get_query_set()

        # Make sure the last choice is None and is selected
        filterspec = changelist.get_filters(request)[0][1]
        self.assertEqual(force_unicode(filterspec.title()), u'author')
        choices = list(filterspec.choices(changelist))
        self.assertEqual(choices[-1]['selected'], True)
        self.assertEqual(choices[-1]['query_string'], '?author__isnull=True')

        request = self.request_factory.get(
            '/', {'author__id__exact': self.alfred.pk})
        changelist = self.get_changelist(request, Book, modeladmin)

        # Make sure the correct choice is selected
        filterspec = changelist.get_filters(request)[0][1]
        self.assertEqual(force_unicode(filterspec.title()), u'author')
        # order of choices depends on User model, which has no order
        choice = select_by(filterspec.choices(changelist), "display", "alfred")
        self.assertEqual(choice['selected'], True)
        self.assertEqual(choice['query_string'],
                         '?author__id__exact=%d' % self.alfred.pk)
Exemple #10
0
def csv_export_all(admn, request, queryset):
    # We want the original criteria from the query set, but with a much higher limit
    cl = ChangeList(request, admn.model, admn.list_display,
                    admn.list_display_links, admn.list_filter,
                    admn.date_hierarchy, admn.search_fields,
                    admn.list_select_related, 100000, admn.list_editable, admn)
    return CsvExport().csv_export(cl.get_query_set())
Exemple #11
0
    def csv_export(self, request):
        fields = self.get_csv_export_fields(request)
        headers = [self.csv_get_fieldname(f) for f in fields]

        from django.contrib.admin.views.main import ChangeList
        cl = ChangeList(request, self.model, self.list_display,
                        self.list_display_links, self.list_filter,
                        self.date_hierarchy, self.search_fields,
                        self.list_select_related, self.list_per_page,
                        self.list_editable, self)
        qs = cl.get_query_set()

        response = HttpResponse(mimetype='text/csv')
        response[
            'Content-Disposition'] = 'attachment; filename=%s' % self.csv_get_export_filename(
                request)
        writer = UnicodeWriter(response,
                               self.csv_export_dialect,
                               encoding=self.csv_encoding,
                               **self.csv_export_fmtparam)
        writer.writerow(headers)
        for row in qs:
            csvrow = [self.csv_resolve_field(row, f) for f in fields]
            writer.writerow(csvrow)
        return response
Exemple #12
0
 def get_change_list_query_set(self, request):
     cl = ChangeList(request, self.model, self.list_display,
                     self.list_display_links, self.list_filter,
                     self.date_hierarchy, self.search_fields,
                     self.list_select_related, self.list_per_page,
                     self.list_editable, self)
     return cl.get_query_set()
Exemple #13
0
    def changelist_view(self, request, extra_context=None):
        from django.contrib.admin.views.main import ChangeList
        cl = ChangeList(request, self.model, list(self.list_display),
                        self.list_display_links, self.list_filter,
                        self.date_hierarchy, self.search_fields,
                        self.list_select_related,
                        self.list_per_page,
                        self.list_max_show_all,
                        self.list_editable,
                        self)


        total_dict = dict()
        outstanding_dict = dict()
        for currency, description in br_settings.INVOICE_CURRENCY_CHOICES:
            # Determine total and subtotal
            subtotal = Decimal(0)
            total = Decimal(0)
            for invoice in cl.get_query_set(request).filter(status=4,
                                                     currency=currency):
                subtotal += invoice.subtotal
                total += invoice.total

            # Add to dictionary
            if total > 0:
                subtotal = decimal_to_string(subtotal, currency)
                total = decimal_to_string(total, currency)
                total_dict[description.lower()] = [subtotal, total]

            subtotal = Decimal(0)
            total = Decimal(0)
            for invoice in cl.get_query_set(request).filter(status__in=[1, 2, 3],
                                                     currency=currency):
                subtotal += invoice.subtotal
                total += invoice.total

            # Add to dictionary
            if total > 0:
                subtotal = decimal_to_string(subtotal, currency)
                total = decimal_to_string(total, currency)
                outstanding_dict[description.lower()] = [subtotal, total]

        extra_context = dict()
        extra_context['total_dict'] = total_dict
        extra_context['outstanding_dict'] = outstanding_dict
        return super(InvoiceAdmin, self).changelist_view(request,
                                                         extra_context=extra_context)
Exemple #14
0
    def changelist_view(self, request, extra_context=None):
        from django.contrib.admin.views.main import ChangeList
        cl = ChangeList(request, self.model, list(self.list_display),
                        self.list_display_links, self.list_filter,
                        self.date_hierarchy, self.search_fields,
                        self.list_select_related,
                        self.list_per_page,
                        self.list_editable,
                        self)


        total_dict = dict()
        outstanding_dict = dict()
        for currency, description in br_settings.INVOICE_CURRENCY_CHOICES:
            # Determine total and subtotal
            subtotal = Decimal(0)
            total = Decimal(0)
            for invoice in cl.get_query_set().filter(status=4,
                                                     currency=currency):
                subtotal += invoice.subtotal
                total += invoice.total

            # Add to dictionary
            if total > 0:
                subtotal = decimal_to_string(subtotal, currency)
                total = decimal_to_string(total, currency)
                total_dict[description.lower()] = [subtotal, total]

            subtotal = Decimal(0)
            total = Decimal(0)
            for invoice in cl.get_query_set().filter(status__in=[1, 2, 3],
                                                     currency=currency):
                subtotal += invoice.subtotal
                total += invoice.total

            # Add to dictionary
            if total > 0:
                subtotal = decimal_to_string(subtotal, currency)
                total = decimal_to_string(total, currency)
                outstanding_dict[description.lower()] = [subtotal, total]

        extra_context = dict()
        extra_context['total_dict'] = total_dict
        extra_context['outstanding_dict'] = outstanding_dict
        return super(InvoiceAdmin, self).changelist_view(request,
                                                         extra_context=extra_context)
 def filtered_request_queryset(self, request):
     """Return queryset filtered by the admin list view"""
     cl = ChangeList(request, self.model, self.list_display,
                     self.list_display_links, self.list_filter,
                     self.date_hierarchy, self.search_fields,
                     self.list_select_related, self.list_per_page,
                     self.list_editable, self)
     return cl.get_query_set()
 def filtered_request_queryset(self, request):
     """Return queryset filtered by the admin list view"""
     cl = ChangeList(request, self.model, self.list_display,
                     self.list_display_links, self.list_filter,
                     self.date_hierarchy, self.search_fields,
                     self.list_select_related, self.list_per_page,
                     self.list_editable, self)
     return cl.get_query_set()
def get_change_list_query_set(model_admin, model, request):
    """
    Returns a QuerySet with the same ordering and filtering like the one that would be visible in Django admin
    """
    
    from django.contrib import admin
    from django.contrib.admin.views.main import ChangeList
    a = model_admin(model, admin.site)
    cl = ChangeList(request, a.model, a.list_display, a.list_display_links, a.list_filter,
        a.date_hierarchy, a.search_fields, a.list_select_related, a.list_per_page, a.list_editable, a)
    return cl.get_query_set()
Exemple #18
0
 def get_current_queryset(self, request):
     """
     Retorna o queryset exibido atualmente no changelist e é utilizado na
     ação ``export_to_csv``.
     """
     ChangeList = self.get_changelist(request)
     cl = ChangeList(request, self.model, self.list_display,
                     self.list_display_links, self.list_filter,
                     self.date_hierarchy, self.search_fields,
                     self.list_select_related, self.list_per_page,
                     self.list_max_show_all, self.list_editable, self)
     return cl.get_query_set(request)
    def get_change_list_query_set(self, request, extra_context=None):
        """
        The 'change list' admin view for this model.
        """
        list_display = self.get_list_display(request)
        list_display_links = self.get_list_display_links(request, list_display)
        ChangeList = self.get_changelist(request)

        cl = ChangeList(request, self.model, list_display,
            list_display_links, self.list_filter, self.date_hierarchy,
            self.search_fields, self.list_select_related,
            self.list_per_page, self.list_max_show_all, self.list_editable,
            self)
        return cl.get_query_set(request)
Exemple #20
0
 def get_tablib_queryset(self, request):
     cl = ChangeList(request,
         self.model,
         self.list_display,
         self.list_display_links,
         self.list_filter,
         self.date_hierarchy,
         self.search_fields,
         self.list_select_related,
         self.list_per_page,
         self.list_editable,
         self,
     )
     return cl.get_query_set()
Exemple #21
0
    def get_change_list_query_set(self, request, extra_context=None):
        """
        The 'change list' admin view for this model.
        """
        list_display = self.get_list_display(request)
        list_display_links = self.get_list_display_links(request, list_display)
        list_filter = self.get_list_filter(request)
        ChangeList = self.get_changelist(request)

        cl = ChangeList(request, self.model, list_display, list_display_links,
                        list_filter, self.date_hierarchy, self.search_fields,
                        self.list_select_related, self.list_per_page,
                        self.list_max_show_all, self.list_editable, self)
        return cl.get_query_set(request)
Exemple #22
0
 def csv_export(self, request):
     fields = self.get_csv_export_fields(request)
     headers = [self.csv_get_fieldname(f) for f in fields]
     
     from django.contrib.admin.views.main import ChangeList
     cl = ChangeList(request, self.model, self.list_display, self.list_display_links, self.list_filter,
         self.date_hierarchy, self.search_fields, self.list_select_related, self.list_per_page, self.list_editable, self)
     qs = cl.get_query_set()
     
     response = HttpResponse(mimetype='text/csv')
     response['Content-Disposition'] = 'attachment; filename=%s' % self.csv_get_export_filename(request)
     writer = UnicodeWriter(response, self.csv_export_dialect, encoding=self.csv_encoding, **self.csv_export_fmtparam)
     writer.writerow(headers)
     for row in qs:
         csvrow = [self.csv_resolve_field(row, f) for f in fields]
         writer.writerow(csvrow)    
     return response
Exemple #23
0
    def changelist_view(self, request, extra_context=None):
        from django.contrib.admin.views.main import ChangeList
        cl = ChangeList(request, self.model, list(self.list_display),
                        self.list_display_links, self.list_filter,
                        self.date_hierarchy, self.search_fields,
                        self.list_select_related,
                        self.list_per_page,
                        self.list_editable,
                        self)

        total_per_currency = Decimal(0)
        total_with_tax = Decimal(0)
        total_dict = dict()
        for item in cl.get_query_set():
            if item.currency in total_dict:
                # Currency in dict
                total_dict[item.currency][0] += item.subtotal
                total_dict[item.currency][1] += item.total
            else:
                # Currency not in dict
                total_dict[item.currency] = [item.subtotal, item.total]

        # Convert variables to currencies
        for k,v in total_dict.items():
            if k == 'euro':
                new_value = (euro(v[0]), euro(v[1]))
                total_dict[k] = new_value
            elif k == 'gbp':
                new_value = (pound(v[0]), pound(v[1]))
                total_dict[k] = new_value
            else:
                new_value = (dollar(v[0]), dollar(v[1]))
                total_dict[k] = new_value

        extra_context = dict()
        extra_context['total_dict'] = total_dict
        return super(InvoiceAdmin, self).changelist_view(request,
                                                         extra_context=extra_context)
def get_query_set(context, item):
    request = HttpRequest()
    preserved_filters = ""
    if 'preserved_filters' in context:
        preserved_filters = context['preserved_filters']
        tmp = QueryDict(preserved_filters)
        d = {}
        for k, v in QueryDict(tmp.get("_changelist_filters")).iteritems():
            if len(v):
                try:
                    date = datetime.strptime(v, "%d/%m/%Y")
                    d[k] = date.strftime("%Y-%m-%d")
                except:
                    d[k] = v
        request.GET = d

    model = type(item)
    adm = site._registry[model]
    cl = ChangeList(request, model, [], [],
                    [], [], adm.search_fields, [],
                    '0', [], [], adm)

#    cl = ChangeList(request, type(item), [], [], [], [], adm.search_fields, [], "0", [], [], adm)
    return cl.get_query_set(request), preserved_filters
Exemple #25
0
    def changelist_view(self, request, extra_context=None):
        "The 'change list' admin view for this model."
        from django.contrib.admin.views.main import ChangeList, ERROR_FLAG
        opts = self.model._meta
        app_label = opts.app_label
        if not self.has_change_permission(request, None):
            raise PermissionDenied

        # Check actions to see if any are available on this changelist
        actions = self.get_actions(request)

        # Remove action checkboxes if there aren't any actions available.
        list_display = list(self.list_display)
        if not actions:
            try:
                list_display.remove('action_checkbox')
            except ValueError:
                pass

        try:
            cl = ChangeList(request, self.model, list_display, self.list_display_links, self.list_filter,
                self.date_hierarchy, self.search_fields, self.list_select_related, self.list_per_page, self.list_editable, self)
        except IncorrectLookupParameters:
            # Wacky lookup parameters were given, so redirect to the main
            # changelist page, without parameters, and pass an 'invalid=1'
            # parameter via the query string. If wacky parameters were given and
            # the 'invalid=1' parameter was already in the query string, something
            # is screwed up with the database, so display an error page.
            if ERROR_FLAG in request.GET.keys():
                return render_to_response('admin/invalid_setup.html', {'title': _('Database error')})
            return HttpResponseRedirect(request.path + '?' + ERROR_FLAG + '=1')

        # If the request was POSTed, this might be a bulk action or a bulk edit.
        # Try to look up an action first, but if this isn't an action the POST
        # will fall through to the bulk edit check, below.
        if actions and request.method == 'POST':
            response = self.response_action(request, queryset=cl.get_query_set())
            if response:
                return response

        # If we're allowing changelist editing, we need to construct a formset
        # for the changelist given all the fields to be edited. Then we'll
        # use the formset to validate/process POSTed data.
        formset = cl.formset = None

        # Handle POSTed bulk-edit data.
        if request.method == "POST" and self.list_editable:
            FormSet = self.get_changelist_formset(request)
            formset = cl.formset = FormSet(request.POST, request.FILES, queryset=cl.result_list)
            if formset.is_valid():
                changecount = 0
                for form in formset.forms:
                    if form.has_changed():
                        obj = self.save_form(request, form, change=True)
                        self.save_model(request, obj, form, change=True)
                        form.save_m2m()
                        change_msg = self.construct_change_message(request, form, None)
                        self.log_change(request, obj, change_msg)
                        changecount += 1

                if changecount:
                    if changecount == 1:
                        name = force_unicode(opts.verbose_name)
                    else:
                        name = force_unicode(opts.verbose_name_plural)
                    msg = ungettext("%(count)s %(name)s was changed successfully.",
                                    "%(count)s %(name)s were changed successfully.",
                                    changecount) % {'count': changecount,
                                                    'name': name,
                                                    'obj': force_unicode(obj)}
                    self.message_user(request, msg)

                return HttpResponseRedirect(request.get_full_path())

        # Handle GET -- construct a formset for display.
        elif self.list_editable:
            FormSet = self.get_changelist_formset(request)
            formset = cl.formset = FormSet(queryset=cl.result_list)

        # Build the list of media to be used by the formset.
        if formset:
            media = self.media + formset.media
        else:
            media = self.media

        # Build the action form and populate it with available actions.
        if actions:
            action_form = self.action_form(auto_id=None)
            action_form.fields['action'].choices = self.get_action_choices(request)
        else:
            action_form = None

        context = {
            'title': cl.title,
            'is_popup': cl.is_popup,
            'cl': cl,
            'media': media,
            'has_add_permission': self.has_add_permission(request),
            'root_path': self.admin_site.root_path,
            'app_label': app_label,
            'action_form': action_form,
            'actions_on_top': self.actions_on_top,
            'actions_on_bottom': self.actions_on_bottom,
        }
        context.update(extra_context or {})
        return render_to_response(self.change_list_template or [
            'admin/%s/%s/change_list.html' % (app_label, opts.object_name.lower()),
            'admin/%s/change_list.html' % app_label,
            'admin/change_list.html'
        ], context, context_instance=template.RequestContext(request))
Exemple #26
0
def csv_export_all(admn, request, queryset):
    # We want the original criteria from the query set, but with a much higher limit
    cl = ChangeList(request, admn.model, admn.list_display, admn.list_display_links, admn.list_filter, admn.date_hierarchy, admn.search_fields, admn.list_select_related, 100000, admn.list_editable, admn)
    return CsvExport().csv_export(cl.get_query_set())
Exemple #27
0
    def changelist_view(self, request, extra_context=None):
        "The 'change list' admin view for this model."
        from django.contrib.admin.views.main import ERROR_FLAG
        opts = self.model._meta
        app_label = opts.app_label

        # Check actions to see if any are available on this changelist
        actions = self.get_actions(request)

        # Remove action checkboxes if there aren't any actions available.
        list_display = list(self.list_display)
        if not actions:
            try:
                list_display.remove('action_checkbox')
            except ValueError:
                pass

        ChangeList = self.get_changelist(request)
        try:
            cl = ChangeList(request, self.model, list_display,
                            self.list_display_links, self.list_filter,
                            self.date_hierarchy, self.search_fields,
                            self.list_select_related, self.list_per_page,
                            self.list_editable, self)
        except adminoptions.IncorrectLookupParameters:
            # Wacky lookup parameters were given, so redirect to the main
            # changelist page, without parameters, and pass an 'invalid=1'
            # parameter via the query string. If wacky parameters were given
            # and the 'invalid=1' parameter was already in the query string,
            # something is screwed up with the database, so display an error
            # page.
            if ERROR_FLAG in request.GET.keys():
                return render_to_response('admin/invalid_setup.html',
                                          {'title': ('Database error')})
            return HttpResponseRedirect(request.path + '?' + ERROR_FLAG + '=1')
        #<<<<
        # if auto_redirect is true we should handle that before anything else
        if self.auto_redirect and cl.query_set.count() == 1:

            obj = cl.query_set[0]
            try:
                url = obj.get_absolute_url()
            except AttributeError:
                url = None

            if url:  # if no url just go ahead and show the display set normally
                return HttpResponseRedirect(url)
        #<<<<

        # If the request was POSTed, this might be a bulk action or a bulk
        # edit. Try to look up an action or confirmation first, but if this
        # isn't an action the POST will fall through to the bulk edit check,
        # below.
        action_failed = False
        selected = request.POST.getlist(helpers.ACTION_CHECKBOX_NAME)

        # Actions with no confirmation
        if actions and request.method == 'POST':
            response = self.response_action(request,
                                            queryset=cl.get_query_set())
            if response:
                return response

        # If we're allowing changelist editing, we need to construct a formset
        # for the changelist given all the fields to be edited. Then we'll
        # use the formset to validate/process POSTed data.
        formset = cl.formset = None

        # Handle POSTed bulk-edit data.
        if (request.method == "POST" and self.list_editable
                and '_save' in request.POST and not action_failed):
            FormSet = self.get_changelist_formset(request)
            formset = cl.formset = FormSet(request.POST,
                                           request.FILES,
                                           queryset=cl.result_list)
            if formset.is_valid():
                changecount = 0
                for form in formset.forms:
                    if form.has_changed():
                        obj = self.save_form(request, form, change=True)
                        self.save_model(request, obj, form, change=True)
                        form.save_m2m()
                        change_msg = self.construct_change_message(
                            request, form, None)
                        self.log_change(request, obj, change_msg)
                        changecount += 1

                if changecount:
                    if changecount == 1:
                        name = force_unicode(opts.verbose_name)
                    else:
                        name = force_unicode(opts.verbose_name_plural)
                    msg = ungettext(
                        "%(count)s %(name)s was changed successfully.",
                        "%(count)s %(name)s were changed successfully.",
                        changecount) % {
                            'count': changecount,
                            'name': name,
                            'obj': force_unicode(obj)
                        }
                    self.message_user(request, msg)

                return HttpResponseRedirect(request.get_full_path())

        # Handle GET -- construct a formset for display.
        elif self.list_editable:
            FormSet = self.get_changelist_formset(request)
            formset = cl.formset = FormSet(queryset=cl.result_list)

        # Build the list of media to be used by the formset.
        if formset:
            media = self.media + formset.media
        else:
            media = self.media

        # Build the action form and populate it with available actions.
        if actions:
            action_form = self.action_form(auto_id=None)
            action_form.fields['action'].choices = self.get_action_choices(
                request)
        else:
            action_form = None

        context = {
            'module_name': force_unicode(opts.verbose_name_plural),
            'title': cl.title,
            'is_popup': cl.is_popup,
            'cl': cl,
            'media': media,
            'has_add_permission': self.has_add_permission(request),
            'root_path': self.admin_site.root_path,
            'app_label': app_label,
            'action_form': action_form,
            'actions_on_top': self.actions_on_top,
            'actions_on_bottom': self.actions_on_bottom,
            'actions_selection_counter': self.actions_selection_counter,
        }
        context.update(extra_context or {})
        context_instance = template.RequestContext(
            request, current_app=self.admin_site.name)
        return render_to_response(self.change_list_template or [
            'admin/%s/%s/change_list.html' %
            (app_label, opts.object_name.lower()),
            'admin/%s/change_list.html' % app_label, 'admin/change_list.html'
        ],
                                  context,
                                  context_instance=context_instance)
Exemple #28
0
	def changelist_view(self, request, extra_context=None):
		"The 'change list' admin view for this model."
		opts = self.model._meta
		app_label = opts.app_label

		# Check actions to see if any are available on this changelist
		actions = self.get_actions(request)

		# Remove action checkboxes if there aren't any actions available.
		list_display = list(self.list_display)
		if not actions:
			try:
				list_display.remove('action_checkbox')
			except ValueError:
				pass

		ChangeList = self.get_changelist(request)
		try:
			cl = ChangeList(request, self.model, list_display, self.list_display_links, self.list_filter,
				self.date_hierarchy, self.search_fields, self.list_select_related, self.list_per_page, iself.list_max_show_all, self.list_editable, self)
		except adminoptions.IncorrectLookupParameters:
			# Wacky lookup parameters were given, so redirect to the main
			# changelist page, without parameters, and pass an 'invalid=1'
			# parameter via the query string. If wacky parameters were given
			# and the 'invalid=1' parameter was already in the query string,
			# something is screwed up with the database, so display an error
			# page.
			if ERROR_FLAG in request.GET.keys():
				return render_to_response('admin/invalid_setup.html', {'title': ('Database error')})
			return HttpResponseRedirect(request.path + '?' + ERROR_FLAG + '=1')
		
		# if auto_redirect is true we should handle that before anything else
		if self.auto_redirect and cl.query_set.count() == 1:

			obj = cl.query_set[0]
			try:
				url = obj.get_absolute_url()
			except AttributeError:
				url = None

			if url: # if no url just go ahead and show the display set normally
				return HttpResponseRedirect(url)

		# If the request was POSTed, this might be a bulk action or a bulk
		# edit. Try to look up an action or confirmation first, but if this
		# isn't an action the POST will fall through to the bulk edit check,
		# below.
		action_failed = False
		selected = request.POST.getlist(helpers.ACTION_CHECKBOX_NAME)

		# Actions with no confirmation
		if actions and request.method == 'POST':
			response = self.response_action(request, queryset=cl.get_query_set())
			if response:
				return response

		# If we're allowing changelist editing, we need to construct a formset
		# for the changelist given all the fields to be edited. Then we'll
		# use the formset to validate/process POSTed data.
		formset = cl.formset = None

		# Handle POSTed bulk-edit data.
		if (request.method == "POST" and self.list_editable and
				'_save' in request.POST and not action_failed):
			FormSet = self.get_changelist_formset(request)
			formset = cl.formset = FormSet(request.POST, request.FILES, queryset=cl.result_list)
			if formset.is_valid():
				changecount = 0
				for form in formset.forms:
					if form.has_changed():
						obj = self.save_form(request, form, change=True)
						self.save_model(request, obj, form, change=True)
						form.save_m2m()
						change_msg = self.construct_change_message(request, form, None)
						self.log_change(request, obj, change_msg)
						changecount += 1

				if changecount:
					if changecount == 1:
						name = force_unicode(opts.verbose_name)
					else:
						name = force_unicode(opts.verbose_name_plural)
					msg = ungettext("%(count)s %(name)s was changed successfully.",
									"%(count)s %(name)s were changed successfully.",
									changecount) % {'count': changecount,
													'name': name,
													'obj': force_unicode(obj)}
					self.message_user(request, msg)

				return HttpResponseRedirect(request.get_full_path())

		# Handle GET -- construct a formset for display.
		elif self.list_editable:
			FormSet = self.get_changelist_formset(request)
			formset = cl.formset = FormSet(queryset=cl.result_list)

		# Build the list of media to be used by the formset.
		if formset:
			media = self.media + formset.media
		else:
			media = self.media

		# Build the action form and populate it with available actions.
		if actions:
			action_form = self.action_form(auto_id=None)
			action_form.fields['action'].choices = self.get_action_choices(request)
		else:
			action_form = None

		# Build the columns form
		column_form_choices = []
		column_form_initial = []
		default_display = getattr(cl.model_admin, "list_display_default", [])

		for item in cl.list_display + cl.list_display_options:

			if item in default_display or item == 'action_checkbox':
				continue
	
			name = getattr(item,"func_name",item)
		
			display_name = getattr(item,"short_description",pretty(name))

			if not (name,display_name) in column_form_choices:
				column_form_choices.append((name,display_name))

			if item in cl.list_display:
				column_form_initial.append(name)

		columns_form = ColumnsForm(request.GET or None)
		columns_form.fields['columns'].choices = column_form_choices
		columns_form.fields['columns'].initial = column_form_initial

		context = {
			'module_name': force_unicode(opts.verbose_name_plural),
			'columns_form': columns_form,
			'title': cl.title,
			'is_popup': cl.is_popup,
			'cl': cl,
			'media': media,
			'has_add_permission': self.has_add_permission(request),
			'root_path': self.admin_site.root_path,
			'app_label': app_label,
			'action_form': action_form,
			'actions_on_top': self.actions_on_top,
			'actions_on_bottom': self.actions_on_bottom,
			'actions_selection_counter': self.actions_selection_counter,
		}
		context.update(extra_context or {})
		context_instance = template.RequestContext(request, current_app=self.admin_site.name)
		return render_to_response(self.change_list_template or [
			'admin/%s/%s/change_list.html' % (app_label, opts.object_name.lower()),
			'admin/%s/change_list.html' % app_label,
			'admin/change_list.html'
		], context, context_instance=context_instance)
Exemple #29
0
    def changelist_view(self, request, extra_context=None):
        # Copied from parent and modified where marked to add map based on
        # change list and media.
        "The 'change list' admin view for this model."
        from django.contrib.admin.views.main import ChangeList, ERROR_FLAG
        opts = self.model._meta
        app_label = opts.app_label
        if not self.has_change_permission(request, None):
            raise PermissionDenied

        # Check actions to see if any are available on this changelist
        actions = self.get_actions(request)

        # Remove action checkboxes if there aren't any actions available.
        list_display = list(self.list_display)
        if not actions:
            try:
                list_display.remove('action_checkbox')
            except ValueError:
                pass

        try:
            cl = ChangeList(request, self.model, list_display,
                            self.list_display_links, self.list_filter,
                            self.date_hierarchy, self.search_fields,
                            self.list_select_related, self.list_per_page,
                            self.list_editable, self)
        except IncorrectLookupParameters:
            # Wacky lookup parameters were given, so redirect to the main
            # changelist page, without parameters, and pass an 'invalid=1'
            # parameter via the query string. If wacky parameters were given and
            # the 'invalid=1' parameter was already in the query string, something
            # is screwed up with the database, so display an error page.
            if ERROR_FLAG in request.GET.keys():
                return render_to_response('admin/invalid_setup.html',
                                          {'title': _('Database error')})
            return HttpResponseRedirect(request.path + '?' + ERROR_FLAG + '=1')

        # If the request was POSTed, this might be a bulk action or a bulk edit.
        # Try to look up an action first, but if this isn't an action the POST
        # will fall through to the bulk edit check, below.
        if actions and request.method == 'POST':
            response = self.response_action(request,
                                            queryset=cl.get_query_set())
            if response:
                return response

        # If we're allowing changelist editing, we need to construct a formset
        # for the changelist given all the fields to be edited. Then we'll
        # use the formset to validate/process POSTed data.
        formset = cl.formset = None

        # Handle POSTed bulk-edit data.
        if request.method == "POST" and self.list_editable:
            FormSet = self.get_changelist_formset(request)
            formset = cl.formset = FormSet(request.POST,
                                           request.FILES,
                                           queryset=cl.result_list)
            if formset.is_valid():
                changecount = 0
                for form in formset.forms:
                    if form.has_changed():
                        obj = self.save_form(request, form, change=True)
                        self.save_model(request, obj, form, change=True)
                        form.save_m2m()
                        change_msg = self.construct_change_message(
                            request, form, None)
                        self.log_change(request, obj, change_msg)
                        changecount += 1

                if changecount:
                    if changecount == 1:
                        name = force_unicode(opts.verbose_name)
                    else:
                        name = force_unicode(opts.verbose_name_plural)
                    msg = ungettext(
                        "%(count)s %(name)s was changed successfully.",
                        "%(count)s %(name)s were changed successfully.",
                        changecount) % {
                            'count': changecount,
                            'name': name,
                            'obj': force_unicode(obj)
                        }
                    self.message_user(request, msg)

                return HttpResponseRedirect(request.get_full_path())

        # Handle GET -- construct a formset for display.
        elif self.list_editable:
            FormSet = self.get_changelist_formset(request)
            formset = cl.formset = FormSet(queryset=cl.result_list)

        # Build the list of media to be used by the formset.
        if formset:
            media = self.media + formset.media
        else:
            media = self.media

        # Build the action form and populate it with available actions.
        if actions:
            action_form = self.action_form(auto_id=None)
            action_form.fields['action'].choices = self.get_action_choices(
                request)
        else:
            action_form = None

        context = {
            'title': cl.title,
            'is_popup': cl.is_popup,
            'cl': cl,
            'media': media,
            'has_add_permission': self.has_add_permission(request),
            'root_path': self.admin_site.root_path,
            'app_label': app_label,
            'action_form': action_form,
            'actions_on_top': self.actions_on_top,
            'actions_on_bottom': self.actions_on_bottom,
        }

        # MODIFICATION
        map = self.get_changelist_map(cl)
        if map:
            context['media'] += map.media
            context['map'] = map
        # END MODIFICATION

        context.update(extra_context or {})
        return render_to_response(
            self.change_list_template or [
                'admin/%s/%s/change_list.html' %
                (app_label, opts.object_name.lower()),
                'admin/%s/change_list.html' % app_label,
                'admin/change_list.html'
            ],
            context,
            context_instance=template.RequestContext(request))
Exemple #30
0
    def changelist_view(self, request):
        """
        The 'change list' admin view for this model.
        """
        from django.contrib.admin.views.main import ERROR_FLAG
        opts = self.model._meta
        app_label = opts.app_label

        if not self.has_permission(request, 'view'):
            raise PermissionDenied

        list_display = self.get_list_display(request)
        list_display_links = self.get_list_display_links(request, list_display)
        list_filter = self.get_list_filter(request)

        # Check actions to see if any are available on this changelist
        actions = self.get_actions(request)
        if actions:
            # Add the action checkboxes if there are any actions available.
            list_display = ['action_checkbox'] +  list(list_display)
        ChangeList = self.get_changelist(request)
        try:
            cl = ChangeList(request, self.model, list_display,
                            list_display_links, list_filter, self.date_hierarchy,
                            self.search_fields, self.list_select_related,
                            self.list_per_page, self.list_max_show_all, self.list_editable,
                            self)
        except IncorrectLookupParameters:
            # Wacky lookup parameters were given, so redirect to the main
            # changelist page, without parameters, and pass an 'invalid=1'
            # parameter via the query string. If wacky parameters were given
            # and the 'invalid=1' parameter was already in the query string,
            # something is screwed up with the database, so display an error
            # page.
            if ERROR_FLAG in request.GET.keys():
                return SimpleTemplateResponse('admin/invalid_setup.html', {
                'title': _('Database error'),
                })
            return HttpResponseRedirect(request.path + '?' + ERROR_FLAG + '=1')

        # If the request was POSTed, this might be a bulk action or a bulk
        # edit. Try to look up an action or confirmation first, but if this
        # isn't an action the POST will fall through to the bulk edit check,
        # below.
        action_failed = False
        selected = request.POST.getlist(helpers.ACTION_CHECKBOX_NAME)
        # Actions with no confirmation
        if (actions and request.method == 'POST' and
                    'index' in request.POST and '_save' not in request.POST):
            if selected:
                response = self.response_action(request, queryset=cl.get_query_set(request))
                if response:
                    return response
                else:
                    action_failed = True
            else:
                msg = _("Items must be selected in order to perform "
                        "actions on them. No items have been changed.")
                self.message_user(request, msg)
                action_failed = True

        # Actions with confirmation
        if (actions and request.method == 'POST' and
                    helpers.ACTION_CHECKBOX_NAME in request.POST and
                    'index' not in request.POST and '_save' not in request.POST):
            if selected:
                response = self.response_action(request, queryset=cl.get_query_set(request))
                if response:
                    return response
                else:
                    action_failed = True

        # If we're allowing changelist editing, we need to construct a formset
        # for the changelist given all the fields to be edited. Then we'll
        # use the formset to validate/process POSTed data.
        formset = cl.formset = None

        # Handle POSTed bulk-edit data.
        if (request.method == "POST" and cl.list_editable and
                    '_save' in request.POST and not action_failed):
            FormSet = self.get_changelist_formset(request)
            formset = cl.formset = FormSet(request.POST, request.FILES, queryset=cl.result_list)
            if formset.is_valid():
                changecount = 0
                for form in formset.forms:
                    if form.has_changed():
                        obj = self.save_form(request, form, change=True)
                        self.save_model(request, obj, form, change=True)
                        self.save_related(request, form, formsets=[], change=True)
                        change_msg = self.construct_change_message(request, form, None)
                        self.log_change(request, obj, change_msg)
                        changecount += 1

                if changecount:
                    if changecount == 1:
                        name = force_text(opts.verbose_name)
                    else:
                        name = force_text(opts.verbose_name_plural)
                    msg = ungettext("%(count)s %(name)s was changed successfully.",
                                    "%(count)s %(name)s were changed successfully.",
                                    changecount) % {'count': changecount,
                                                    'name': name,
                                                    'obj': force_text(obj)}
                    self.message_user(request, msg)

                return HttpResponseRedirect(request.get_full_path())

        # Handle GET -- construct a formset for display.
        elif cl.list_editable:
            FormSet = self.get_changelist_formset(request)
            formset = cl.formset = FormSet(queryset=cl.result_list)

        # Build the list of media to be used by the formset.
        if formset:
            media = self.media + formset.media
        else:
            media = self.media
        # Build the action form and populate it with available actions.
        if actions:
            action_form = self.action_form(auto_id=None)
            action_form.fields['action'].choices = self.get_action_choices(request)
        else:
            action_form = None

        selection_note_all = ungettext('%(total_count)s selected',
                                       'All %(total_count)s selected', cl.result_count)

        _active_filters= False
        for filter_spec in cl.filter_specs:
            if filter_spec.used_parameters and filter_spec.template:
                _active_filters = True
                continue

        context = {
            'module_name': force_text(opts.verbose_name_plural),
            'selection_note': _('0 of %(cnt)s selected') % {'cnt': len(cl.result_list)},
            'selection_note_all': selection_note_all % {'total_count': cl.result_count},
            'title': cl.title,
            'is_popup': cl.is_popup,
            'cl': cl,
            'media': media,
            'has_add_permission': self.has_permission(request,'add') and self.allow_add,
            'app_label': app_label,
            'action_form': action_form,
            'actions_on_top': self.actions_on_top,
            'actions_on_bottom': self.actions_on_bottom,
            'actions_selection_counter': self.actions_selection_counter,
            'active_filters' : _active_filters,
        }

        return TemplateResponse(request, self.change_list_template or [
            '%s/%s/view_list.html' % (app_label, opts.object_name.lower()),
            '%s/view_list.html' % app_label,
            'admin/view_list.html'
        ], context, current_app=self.admin_site.name)