コード例 #1
0
ファイル: admin.py プロジェクト: ljarufe/capriccio
 def changelist_view(self, request, extra_context = None):
     if not self.has_change_permission(request, None):
         raise PermissionDenied
     
     if request.method == "GET":
         if "action" in request.GET:
             return grabar_ubicacion(request)
     opts = self.model._meta
     app_label = opts.app_label
     try:
         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.change_list_template, self)
         cl.formset = None   
     except IncorrectLookupParameters:
         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')
     lugar = place.objects.all()
     context = { 
         'title': 'Administracion de Ubicacion Tiendas',
         'is_popup': cl.is_popup,
         'cl': cl,
         'has_add_permission': self.has_add_permission(request),
         'root_path': self.admin_site.root_path,
         'app_label': app_label,
         'lugar':lugar,
     }
     context.update(extra_context or {})
     return render_to_response(self.change_list_template, context)
コード例 #2
0
ファイル: tests.py プロジェクト: lazmicommunication/django
    def test_distinct_for_through_m2m_at_second_level_in_list_filter(self):
        """
        When using a ManyToMany in list_filter at the second level behind a
        ForeignKey, distinct() must be called and results shouldn't appear more
        than once.
        """
        lead = Musician.objects.create(name="Vox")
        band = Group.objects.create(name="The Hype")
        Concert.objects.create(name="Woodstock", group=band)
        Membership.objects.create(group=band, music=lead, role="lead voice")
        Membership.objects.create(group=band, music=lead, role="bass player")

        m = ConcertAdmin(Concert, custom_site)
        request = self.factory.get("/concert/", data={"group__members": lead.pk})

        cl = ChangeList(
            request,
            Concert,
            m.list_display,
            m.list_display_links,
            m.list_filter,
            m.date_hierarchy,
            m.search_fields,
            m.list_select_related,
            m.list_per_page,
            m.list_max_show_all,
            m.list_editable,
            m,
        )

        cl.get_results(request)

        # There's only one Concert instance
        self.assertEqual(cl.result_count, 1)
コード例 #3
0
ファイル: admin.py プロジェクト: gustavohenrique/bandcontrol
    def changelist_view(self, request, extra_context=None, **kwargs):
        """
        Sobrescreve o metodo changelist_view responsavel por exibir os dados do objeto,
        adicionando o total de IPs liberados e negados.
        Cria o arquivo texto usado pelos scripts de firewall e controle de banda.
        """

        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)
        cl.formset = None

        if extra_context is None:
            extra_context = {}

        novo_arquivo_pontosrede = self._novo_arquivo_pontosrede()

        extra_context['cl'] = cl
        extra_context['total_liberados'] = novo_arquivo_pontosrede['total_liberados']
        extra_context['total_negados'] = novo_arquivo_pontosrede['total_negados']
        return super(PontoRedeAdmin, self).changelist_view(request, extra_context=extra_context)
コード例 #4
0
ファイル: tests.py プロジェクト: MounirMesselmeni/django
    def test_pagination_page_range(self):
        """
        Regression tests for ticket #15653: ensure the number of pages
        generated for changelist views are correct.
        """
        # instantiating and setting up ChangeList object
        m = GroupAdmin(Group, custom_site)
        request = self.factory.get('/group/')
        cl = ChangeList(request, Group, *get_changelist_args(m))
        per_page = cl.list_per_page = 10

        for page_num, objects_count, expected_page_range in [
            (0, per_page, []),
            (0, per_page * 2, list(range(2))),
            (5, per_page * 11, list(range(11))),
            (5, per_page * 12, [0, 1, 2, 3, 4, 5, 6, 7, 8, '.', 10, 11]),
            (6, per_page * 12, [0, 1, '.', 3, 4, 5, 6, 7, 8, 9, 10, 11]),
            (6, per_page * 13, [0, 1, '.', 3, 4, 5, 6, 7, 8, 9, '.', 11, 12]),
        ]:
            # assuming we have exactly `objects_count` objects
            Group.objects.all().delete()
            for i in range(objects_count):
                Group.objects.create(name='test band')

            # setting page number and calculating page range
            cl.page_num = page_num
            cl.get_results(request)
            real_page_range = pagination(cl)['page_range']

            self.assertListEqual(
                expected_page_range,
                list(real_page_range),
            )
コード例 #5
0
ファイル: tests.py プロジェクト: HouseAlwaysWin/django
 def test_result_list_set_empty_value_display_on_admin_site(self):
     """
     Test that empty value display can be set on AdminSite
     """
     new_child = Child.objects.create(name='name', parent=None)
     request = self.factory.get('/child/')
     # Set a new empty display value on AdminSite.
     admin.site.empty_value_display = '???'
     m = ChildAdmin(Child, admin.site)
     list_display = m.get_list_display(request)
     list_display_links = m.get_list_display_links(request, list_display)
     cl = ChangeList(request, Child, list_display, list_display_links,
         m.list_filter, m.date_hierarchy, m.search_fields,
         m.list_select_related, m.list_per_page, m.list_max_show_all, m.list_editable, m)
     cl.formset = None
     template = Template('{% load admin_list %}{% spaceless %}{% result_list cl %}{% endspaceless %}')
     context = Context({'cl': cl})
     table_output = template.render(context)
     link = reverse('admin:admin_changelist_child_change', args=(new_child.id,))
     row_html = (
         '<tbody><tr class="row1"><th class="field-name"><a href="%s">name</a></th>'
         '<td class="field-parent nowrap">???</td></tr></tbody>' % link
     )
     self.assertNotEqual(table_output.find(row_html), -1,
         'Failed to find expected row element: %s' % table_output)
コード例 #6
0
ファイル: tests.py プロジェクト: Aaron1011/oh-mainline
    def test_result_list_editable_html(self):
        """
        Regression tests for #11791: Inclusion tag result_list generates a
        table and this checks that the items are nested within the table
        element tags.
        Also a regression test for #13599, verifies that hidden fields
        when list_editable is enabled are rendered in a div outside the
        table.
        """
        new_parent = Parent.objects.create(name='parent')
        new_child = Child.objects.create(name='name', parent=new_parent)
        request = MockRequest()
        m = ChildAdmin(Child, admin.site)

        # Test with list_editable fields
        m.list_display = ['id', 'name', 'parent']
        m.list_display_links = ['id']
        m.list_editable = ['name']
        cl = ChangeList(request, Child, m.list_display, m.list_display_links,
                m.list_filter, m.date_hierarchy, m.search_fields,
                m.list_select_related, m.list_per_page, m.list_editable, m)
        FormSet = m.get_changelist_formset(request)
        cl.formset = FormSet(queryset=cl.result_list)
        template = Template('{% load admin_list %}{% spaceless %}{% result_list cl %}{% endspaceless %}')
        context = Context({'cl': cl})
        table_output = template.render(context)
        # make sure that hidden fields are in the correct place
        hiddenfields_div = '<div class="hiddenfields"><input type="hidden" name="form-0-id" value="%d" id="id_form-0-id" /></div>' % new_child.id
        self.assertFalse(table_output.find(hiddenfields_div) == -1,
            'Failed to find hidden fields in: %s' % table_output)
        # make sure that list editable fields are rendered in divs correctly
        editable_name_field = '<input name="form-0-name" value="name" class="vTextField" maxlength="30" type="text" id="id_form-0-name" />'
        self.assertFalse('<td>%s</td>' % editable_name_field == -1,
            'Failed to find "name" list_editable field in: %s' % table_output)
コード例 #7
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)
コード例 #8
0
ファイル: tests.py プロジェクト: Aaron1011/oh-mainline
    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')
コード例 #9
0
ファイル: admin.py プロジェクト: feche87/django-tablib
 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()
コード例 #10
0
ファイル: tests.py プロジェクト: MounirMesselmeni/django
    def test_result_list_with_allow_tags(self):
        """
        Test for deprecation of allow_tags attribute
        """
        new_parent = Parent.objects.create(name='parent')
        for i in range(2):
            Child.objects.create(name='name %s' % i, parent=new_parent)
        request = self.factory.get('/child/')
        m = ChildAdmin(Child, custom_site)

        def custom_method(self, obj=None):
            return 'Unsafe html <br />'
        custom_method.allow_tags = True

        # Add custom method with allow_tags attribute
        m.custom_method = custom_method
        m.list_display = ['id', 'name', 'parent', 'custom_method']

        cl = ChangeList(request, Child, *get_changelist_args(m))
        FormSet = m.get_changelist_formset(request)
        cl.formset = FormSet(queryset=cl.result_list)
        template = Template('{% load admin_list %}{% spaceless %}{% result_list cl %}{% endspaceless %}')
        context = Context({'cl': cl})
        table_output = template.render(context)
        custom_field_html = '<td class="field-custom_method">Unsafe html <br /></td>'
        self.assertInHTML(custom_field_html, table_output)
コード例 #11
0
 def test_result_list_html(self):
     """
     Verifies that inclusion tag result_list generates a table when with
     default ModelAdmin settings.
     """
     new_parent = Parent.objects.create(name="parent")
     new_child = Child.objects.create(name="name", parent=new_parent)
     request = MockRequest()
     m = ChildAdmin(Child, admin.site)
     cl = ChangeList(
         request,
         Child,
         m.list_display,
         m.list_display_links,
         m.list_filter,
         m.date_hierarchy,
         m.search_fields,
         m.list_select_related,
         m.list_per_page,
         m.list_editable,
         m,
     )
     cl.formset = None
     template = Template("{% load admin_list %}{% spaceless %}{% result_list cl %}{% endspaceless %}")
     context = Context({"cl": cl})
     table_output = template.render(context)
     row_html = '<tbody><tr class="row1"><td class="action-checkbox"><input type="checkbox" class="action-select" value="1" name="_selected_action" /></td><th><a href="1/">name</a></th><td class="nowrap">Parent object</td></tr></tbody>'
     self.assertFalse(table_output.find(row_html) == -1, "Failed to find expected row element: %s" % table_output)
コード例 #12
0
    def test_distinct_for_inherited_m2m_in_list_filter(self):
        """
        Regression test for #13902: When using a ManyToMany in list_filter,
        results shouldn't apper more than once. Model managed in the
        admin inherits from the one that defins the relationship.
        """
        lead = Musician.objects.create(name="John")
        four = Quartet.objects.create(name="The Beatles")
        Membership.objects.create(group=four, music=lead, role="lead voice")
        Membership.objects.create(group=four, music=lead, role="guitar player")

        m = QuartetAdmin(Quartet, admin.site)
        cl = ChangeList(
            MockFilteredRequestB(),
            Quartet,
            m.list_display,
            m.list_display_links,
            m.list_filter,
            m.date_hierarchy,
            m.search_fields,
            m.list_select_related,
            m.list_per_page,
            m.list_editable,
            m,
        )

        cl.get_results(MockFilteredRequestB())

        # There's only one Quartet instance
        self.assertEqual(cl.result_count, 1)
コード例 #13
0
    def test_distinct_for_m2m_in_list_filter(self):
        """
        Regression test for #13902: When using a ManyToMany in list_filter,
        results shouldn't apper more than once. Basic ManyToMany.
        """
        blues = Genre.objects.create(name="Blues")
        band = Band.objects.create(name="B.B. King Review", nr_of_members=11)

        band.genres.add(blues)
        band.genres.add(blues)

        m = BandAdmin(Band, admin.site)
        cl = ChangeList(
            MockFilteredRequestA(),
            Band,
            m.list_display,
            m.list_display_links,
            m.list_filter,
            m.date_hierarchy,
            m.search_fields,
            m.list_select_related,
            m.list_per_page,
            m.list_editable,
            m,
        )

        cl.get_results(MockFilteredRequestA())

        # There's only one Group instance
        self.assertEqual(cl.result_count, 1)
コード例 #14
0
    def test_distinct_for_through_m2m_in_list_filter(self):
        """
        Regression test for #13902: When using a ManyToMany in list_filter,
        results shouldn't apper more than once. With an intermediate model.
        """
        lead = Musician.objects.create(name="Vox")
        band = Group.objects.create(name="The Hype")
        Membership.objects.create(group=band, music=lead, role="lead voice")
        Membership.objects.create(group=band, music=lead, role="bass player")

        m = GroupAdmin(Group, admin.site)
        cl = ChangeList(
            MockFilteredRequestB(),
            Group,
            m.list_display,
            m.list_display_links,
            m.list_filter,
            m.date_hierarchy,
            m.search_fields,
            m.list_select_related,
            m.list_per_page,
            m.list_editable,
            m,
        )

        cl.get_results(MockFilteredRequestB())

        # There's only one Group instance
        self.assertEqual(cl.result_count, 1)
コード例 #15
0
ファイル: tests.py プロジェクト: batiste/django-old
    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')
コード例 #16
0
    def test_custom_paginator(self):
        new_parent = Parent.objects.create(name="parent")
        for i in range(200):
            new_child = Child.objects.create(name="name %s" % i, parent=new_parent)

        request = MockRequest()
        m = ChildAdmin(Child, admin.site)
        m.list_display = ["id", "name", "parent"]
        m.list_display_links = ["id"]
        m.list_editable = ["name"]
        m.paginator = CustomPaginator

        cl = ChangeList(
            request,
            Child,
            m.list_display,
            m.list_display_links,
            m.list_filter,
            m.date_hierarchy,
            m.search_fields,
            m.list_select_related,
            m.list_per_page,
            m.list_editable,
            m,
        )

        cl.get_results(request)
        self.assertIsInstance(cl.paginator, CustomPaginator)
コード例 #17
0
ファイル: tests.py プロジェクト: nimbis/django
 def test_result_list_html(self):
     """
     Verifies that inclusion tag result_list generates a table when with
     default ModelAdmin settings.
     """
     new_parent = Parent.objects.create(name="parent")
     new_child = Child.objects.create(name="name", parent=new_parent)
     request = self.factory.get("/child/")
     m = ChildAdmin(Child, admin.site)
     list_display = m.get_list_display(request)
     list_display_links = m.get_list_display_links(request, list_display)
     cl = ChangeList(
         request,
         Child,
         list_display,
         list_display_links,
         m.list_filter,
         m.date_hierarchy,
         m.search_fields,
         m.list_select_related,
         m.list_per_page,
         m.list_max_show_all,
         m.list_editable,
         m,
     )
     cl.formset = None
     template = Template("{% load admin_list %}{% spaceless %}{% result_list cl %}{% endspaceless %}")
     context = Context({"cl": cl})
     table_output = template.render(context)
     row_html = (
         '<tbody><tr class="row1"><th><a href="%d/">name</a></th><td class="nowrap">Parent object</td></tr></tbody>'
         % new_child.id
     )
     self.assertFalse(table_output.find(row_html) == -1, "Failed to find expected row element: %s" % table_output)
コード例 #18
0
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()
コード例 #19
0
 def test_filter_none(self):
     request = RequestFactory().get('/person/')
     request.user = AnonymousUser()
     cl = ChangeList(request, models.Person, *self.get_changelist_args())
     cl.get_results(request)
     self.assertEqual(
         list(cl.result_list), list(models.Person.objects.all()))
コード例 #20
0
 def test_result_list_empty_changelist_value(self):
     """
     Regression test for #14982: EMPTY_CHANGELIST_VALUE should be honored
     for relationship fields
     """
     new_child = Child.objects.create(name="name", parent=None)
     request = MockRequest()
     m = ChildAdmin(Child, admin.site)
     cl = ChangeList(
         request,
         Child,
         m.list_display,
         m.list_display_links,
         m.list_filter,
         m.date_hierarchy,
         m.search_fields,
         m.list_select_related,
         m.list_per_page,
         m.list_editable,
         m,
     )
     cl.formset = None
     template = Template("{% load admin_list %}{% spaceless %}{% result_list cl %}{% endspaceless %}")
     context = Context({"cl": cl})
     table_output = template.render(context)
     row_html = '<tbody><tr class="row1"><td class="action-checkbox"><input type="checkbox" class="action-select" value="1" name="_selected_action" /></td><th><a href="1/">name</a></th><td class="nowrap">(None)</td></tr></tbody>'
     self.assertFalse(table_output.find(row_html) == -1, "Failed to find expected row element: %s" % table_output)
コード例 #21
0
ファイル: tests.py プロジェクト: lazmicommunication/django
    def test_custom_paginator(self):
        new_parent = Parent.objects.create(name="parent")
        for i in range(200):
            Child.objects.create(name="name %s" % i, parent=new_parent)

        request = self.factory.get("/child/")
        m = CustomPaginationAdmin(Child, custom_site)

        cl = ChangeList(
            request,
            Child,
            m.list_display,
            m.list_display_links,
            m.list_filter,
            m.date_hierarchy,
            m.search_fields,
            m.list_select_related,
            m.list_per_page,
            m.list_max_show_all,
            m.list_editable,
            m,
        )

        cl.get_results(request)
        self.assertIsInstance(cl.paginator, CustomPaginator)
コード例 #22
0
ファイル: tests.py プロジェクト: lazmicommunication/django
    def test_distinct_for_m2m_in_list_filter(self):
        """
        Regression test for #13902: When using a ManyToMany in list_filter,
        results shouldn't appear more than once. Basic ManyToMany.
        """
        blues = Genre.objects.create(name="Blues")
        band = Band.objects.create(name="B.B. King Review", nr_of_members=11)

        band.genres.add(blues)
        band.genres.add(blues)

        m = BandAdmin(Band, custom_site)
        request = self.factory.get("/band/", data={"genres": blues.pk})

        cl = ChangeList(
            request,
            Band,
            m.list_display,
            m.list_display_links,
            m.list_filter,
            m.date_hierarchy,
            m.search_fields,
            m.list_select_related,
            m.list_per_page,
            m.list_max_show_all,
            m.list_editable,
            m,
        )

        cl.get_results(request)

        # There's only one Group instance
        self.assertEqual(cl.result_count, 1)
コード例 #23
0
ファイル: tests.py プロジェクト: lazmicommunication/django
 def test_result_list_set_empty_value_display_in_model_admin(self):
     """
     Test that empty value display can be set in ModelAdmin or individual fields.
     """
     new_child = Child.objects.create(name="name", parent=None)
     request = self.factory.get("/child/")
     m = EmptyValueChildAdmin(Child, admin.site)
     list_display = m.get_list_display(request)
     list_display_links = m.get_list_display_links(request, list_display)
     cl = ChangeList(
         request,
         Child,
         list_display,
         list_display_links,
         m.list_filter,
         m.date_hierarchy,
         m.search_fields,
         m.list_select_related,
         m.list_per_page,
         m.list_max_show_all,
         m.list_editable,
         m,
     )
     cl.formset = None
     template = Template("{% load admin_list %}{% spaceless %}{% result_list cl %}{% endspaceless %}")
     context = Context({"cl": cl})
     table_output = template.render(context)
     link = reverse("admin:admin_changelist_child_change", args=(new_child.id,))
     row_html = (
         '<tbody><tr class="row1"><th class="field-name"><a href="%s">name</a></th>'
         '<td class="field-age_display">&dagger;</td><td class="field-age">-empty-</td></tr></tbody>' % link
     )
     self.assertNotEqual(table_output.find(row_html), -1, "Failed to find expected row element: %s" % table_output)
コード例 #24
0
ファイル: tests.py プロジェクト: lazmicommunication/django
 def test_result_list_empty_changelist_value(self):
     """
     Regression test for #14982: EMPTY_CHANGELIST_VALUE should be honored
     for relationship fields
     """
     new_child = Child.objects.create(name="name", parent=None)
     request = self.factory.get("/child/")
     m = ChildAdmin(Child, custom_site)
     list_display = m.get_list_display(request)
     list_display_links = m.get_list_display_links(request, list_display)
     cl = ChangeList(
         request,
         Child,
         list_display,
         list_display_links,
         m.list_filter,
         m.date_hierarchy,
         m.search_fields,
         m.list_select_related,
         m.list_per_page,
         m.list_max_show_all,
         m.list_editable,
         m,
     )
     cl.formset = None
     template = Template("{% load admin_list %}{% spaceless %}{% result_list cl %}{% endspaceless %}")
     context = Context({"cl": cl})
     table_output = template.render(context)
     link = reverse("admin:admin_changelist_child_change", args=(new_child.id,))
     row_html = (
         '<tbody><tr class="row1"><th class="field-name"><a href="%s">name</a></th>'
         '<td class="field-parent nowrap">-</td></tr></tbody>' % link
     )
     self.assertNotEqual(table_output.find(row_html), -1, "Failed to find expected row element: %s" % table_output)
コード例 #25
0
    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 ěščřžýáíé')
コード例 #26
0
    def test_distinct_for_m2m_to_inherited_in_list_filter(self):
        """
        Regression test for #13902: When using a ManyToMany in list_filter,
        results shouldn't apper more than once. Target of the relationship
        inherits from another.
        """
        lead = ChordsMusician.objects.create(name="Player A")
        three = ChordsBand.objects.create(name="The Chords Trio")
        Invitation.objects.create(band=three, player=lead, instrument="guitar")
        Invitation.objects.create(band=three, player=lead, instrument="bass")

        m = ChordsBandAdmin(ChordsBand, admin.site)
        cl = ChangeList(
            MockFilteredRequestB(),
            ChordsBand,
            m.list_display,
            m.list_display_links,
            m.list_filter,
            m.date_hierarchy,
            m.search_fields,
            m.list_select_related,
            m.list_per_page,
            m.list_editable,
            m,
        )

        cl.get_results(MockFilteredRequestB())

        # There's only one ChordsBand instance
        self.assertEqual(cl.result_count, 1)
コード例 #27
0
ファイル: tests.py プロジェクト: HouseAlwaysWin/django
 def test_result_list_html(self):
     """
     Verifies that inclusion tag result_list generates a table when with
     default ModelAdmin settings.
     """
     new_parent = Parent.objects.create(name='parent')
     new_child = Child.objects.create(name='name', parent=new_parent)
     request = self.factory.get('/child/')
     m = ChildAdmin(Child, custom_site)
     list_display = m.get_list_display(request)
     list_display_links = m.get_list_display_links(request, list_display)
     cl = ChangeList(request, Child, list_display, list_display_links,
         m.list_filter, m.date_hierarchy, m.search_fields,
         m.list_select_related, m.list_per_page, m.list_max_show_all, m.list_editable, m)
     cl.formset = None
     template = Template('{% load admin_list %}{% spaceless %}{% result_list cl %}{% endspaceless %}')
     context = Context({'cl': cl})
     table_output = template.render(context)
     link = reverse('admin:admin_changelist_child_change', args=(new_child.id,))
     row_html = (
         '<tbody><tr class="row1"><th class="field-name"><a href="%s">name</a></th>'
         '<td class="field-parent nowrap">Parent object</td></tr></tbody>' % link
     )
     self.assertNotEqual(table_output.find(row_html), -1,
         'Failed to find expected row element: %s' % table_output)
コード例 #28
0
ファイル: data.py プロジェクト: andreitch/django-common-apps
def export(request, admin_site, model_name, app_label, format='csv'):
    if not request.user.is_staff:
        return HttpResponseForbidden()

    if not format in ALLOWED_EXPORT_TYPES:
        raise Http404('%s is not a supported format.' % format)

    model = get_model(app_label, model_name)
    model_admin = None

    for entry in admin_site._registry:
        if entry._meta.object_name == model._meta.object_name:
            model_admin = admin_site._registry[entry]

    if model_admin == None:
        raise Http404('ModelAdmin for model %s.%s not found' % (app_label, model_name))

    cl = ChangeList(request, model, list(model_admin.list_display), model_admin.list_display_links,
                    model_admin.list_filter, model_admin.date_hierarchy, model_admin.search_fields,
                    model_admin.list_select_related, model_admin.list_per_page, model_admin.list_editable,
                    model_admin)
    cl.formset = None

    c = RequestContext(request)
    if 'template' in ALLOWED_EXPORT_TYPES[format]:
        rows = []
        headers = []

        for field in model._meta.fields:
            headers.append(field.name)

        rows.append(headers)

        for record in cl.query_set:
            column = []

            for field in headers:
                val = getattr(record, field)

                if callable(val):
                    val = val()

                val = smart_str(val)
                column.append(val)

            rows.append(column)

        t = loader.get_template(ALLOWED_EXPORT_TYPES[format]['template'])
        c['rows'] = rows
        responseContents = t.render(c)
    elif 'serializer' in ALLOWED_EXPORT_TYPES[format]:
        responseContents = serialize(ALLOWED_EXPORT_TYPES[format]['serializer'], cl.query_set.all())
    else:
        raise Http404('Export type for %s must have value for template or serializer' % format)

    response = HttpResponse(responseContents, mimetype=ALLOWED_EXPORT_TYPES[format]['mimetype'])
    response['Content-Disposition'] = 'attachment; filename=%s' % (ALLOWED_EXPORT_TYPES[format]['filename'] % slugify(model_name))

    return response
コード例 #29
0
 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()
コード例 #30
0
 def test_filter_country(self):
     request = RequestFactory().get("/person/", data={"country": "NZ"})
     request.user = AnonymousUser()
     cl = ChangeList(request, models.Person, *self.get_changelist_args())
     cl.get_results(request)
     self.assertEqual(
         list(cl.result_list), list(models.Person.objects.exclude(country="AU"))
     )
コード例 #31
0
 def test_filter_country(self):
     request = RequestFactory().get('/person/', data={'country': 'NZ'})
     cl = ChangeList(request, models.Person, *self.get_changelist_args())
     cl.get_results(request)
     self.assertEqual(list(cl.result_list),
                      list(models.Person.objects.exclude(country='AU')))
コード例 #32
0
 def get_changelist(self, request, model, modeladmin):
     return ChangeList(request, model, 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_max_show_all, modeladmin.list_editable, modeladmin)
コード例 #33
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()
コード例 #34
0
 def test_filter_none(self):
     request = RequestFactory().get('/person/')
     cl = ChangeList(request, models.Person, *self.get_changelist_args())
     cl.get_results(request)
     self.assertEqual(list(cl.result_list),
                      list(models.Person.objects.all()))
コード例 #35
0
    def changelist_view(self, request, extra_context=None):
        '''rewriting this to sometimes kill the "ID" filter when you click on another one.'''
        if request.GET.get('id'):
            #delete id parameter if there are other filters! yes!
            real_keys = [
                k for k in request.GET.keys()
                if k not in getattr(self, 'not_count_filters', [])
            ]
            if len(real_keys) != 1:
                q = request.GET.copy()
                del q['id']
                request.GET = q
                request.META['QUERY_STRING'] = request.GET.urlencode()
        if request.method == 'GET':
            '''re-create a changelist, get the filter specs, and put them into the
            request somewhere to be picked up by a future edit to the change list template,
            which would allow them to be displayed for all normal changelist_view pages'''
            #this is so that I can display filters on the top of the page for easy cancelling them.

            if request.GET.get('_changelist_filters'):
                qq = request.GET.copy()
                del qq['_changelist_filters']
                log.info(
                    'killed extraneous weird filter thingie which would have caused a 500 error.'
                )
                request.GET = qq

            ChangeList = self.get_changelist(request)
            list_display = self.get_list_display(request)
            list_display_links = self.get_list_display_links(
                request, list_display)
            from django.contrib.admin import options
            list_filter = self.get_list_filter(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)
            used_filters = [xx for xx in cl.filter_specs if xx.used_parameters]
            filter_descriptions = []
            from django.contrib.admin.filters import BooleanFieldListFilter
            if 'id' in request.GET:
                desc = ('id', request.GET['id'],
                        make_untoggle_link(request, 'id'))
                filter_descriptions.append(desc)
            for key in request.GET.keys():
                if key.endswith('__id'):
                    desc = ('%s id' % key.split('__')[0], request.GET[key],
                            make_untoggle_link(request, key))
                    filter_descriptions.append(desc)
            for uf in used_filters:
                if type(uf) == BooleanFieldListFilter:
                    current_val = bool(int(uf.used_parameters.values()[0]))
                    if current_val:
                        desc = (uf.title, current_val,
                                make_untoggle_link(
                                    request,
                                    uf.used_parameters.items()[0][0]))
                    else:
                        desc = (uf.title, current_val,
                                make_untoggle_link(
                                    request,
                                    uf.used_parameters.items()[0][0]))
                    filter_descriptions.append(desc)
                else:
                    try:
                        current_val = uf.used_parameters.values()[0]
                        choice = None
                        if getattr(uf, 'lookup_choices', False):
                            got = False
                            #looking up the "descriptive" way to describe the value.
                            for choice in uf.lookup_choices:
                                if choice[0] == current_val:
                                    choice = choice[1]
                                    break
                                try:
                                    int(current_val)
                                    if choice[0] == int(current_val):
                                        choice = choice[1]
                                        break
                                except ValueError:
                                    pass
                                try:
                                    float(current_val)
                                    if choice[0] == float(current_val):
                                        choice = choice[1]
                                        break
                                except ValueError:
                                    pass
                            if not choice:
                                pass
                        else:
                            choice = uf.used_parameters.keys()[0]
                            choice = current_val
                        desc = (uf.title, choice,
                                make_untoggle_link(
                                    request,
                                    uf.used_parameters.items()[0][0]))
                        filter_descriptions.append(desc)
                    except Exception as e:
                        pass
            if request.GET and 'q' in request.GET:
                desc = ('Searching for', "\"%s\"" % request.GET['q'],
                        make_untoggle_link(request, 'q'))
                filter_descriptions.append(desc)
            request.filter_descriptions = filter_descriptions
        sup = super(OverriddenModelAdmin, self)
        return sup.changelist_view(request, extra_context=extra_context)
コード例 #36
0
ファイル: views.py プロジェクト: madmanic/django-displayset
    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)