Esempio n. 1
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)
Esempio n. 2
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')
Esempio n. 3
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')
Esempio n. 4
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')
Esempio n. 5
0
 def build_changelist_choices(request, model_class, modeladmin, index=0):
     request.user = AnonymousUser()
     # yychen 2020-02-02: the request factory does not support middleware,
     # so no user would be set in request.
     # However, a check of request.user is performed in ChangeList()
     # which will cause error.
     # So we inject AnonymousUser here
     # https://stackoverflow.com/questions/54183451
     # https://docs.djangoproject.com/en/3.0/topics/testing/advanced/#the-request-factory
     changelist = ChangeList(
         request,
         model_class,
         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,
         modeladmin.sortable_by,
     )
     filterspec = changelist.get_filters(request)[0][index]
     choices = filterspec.choices(changelist)
     return choices
Esempio n. 6
0
 def build_changelist_choices(request, model_class, modeladmin, index=0):
     changelist = ChangeList(
         request, model_class, 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,
     )
     filterspec = changelist.get_filters(request)[0][index]
     choices = filterspec.choices(changelist)
     return choices
Esempio n. 7
0
class RangeValuesFilterSpecTest (TestCase):
    def setUp(self):
        # FIXME: I don't understand most of what this is doing
        # Ideas borrowed from:
        # https://github.com/django/django
        #   /blob/master/tests/regressiontests/admin_filters/tests.py
        self.modeladmin = FoodAdmin(Food, admin.site)
        self.request_factory = RequestFactory()
        self.request = self.request_factory.get('/')
        self.change_list = ChangeList(
            self.request,
            Food,
            self.modeladmin.list_display,
            self.modeladmin.list_display_links,
            self.modeladmin.list_filter,
            self.modeladmin.date_hierarchy,
            self.modeladmin.search_fields,
            self.modeladmin.list_select_related,
            self.modeladmin.list_per_page,
            self.modeladmin.list_editable,
            self.modeladmin
        )


    def test_range_values_filter(self):
        """RangeValues filter on Food's grams_per_ml works.
        """
        filter_spec = self.change_list.get_filters(self.request)[0][0]
        self.assertEqual(filter_spec.title(), 'grams per ml')
        choices = list(filter_spec.choices(self.change_list))
        self.assertEqual(choices, [
            {
                'display': u'All',
                 'query_string': '?',
                 'selected': True
            },
            {
                'display': u'< 0.5',
                'query_string': '?grams_per_ml__lt=0.5',
                'selected': False
            },
            {
                'display': u'0.5 - 1.0',
                'query_string': '?grams_per_ml__gte=0.5&grams_per_ml__lt=1.0',
                'selected': False
            },
            {
                'display': u'≥ 1.0',
                'query_string': '?grams_per_ml__gte=1.0',
                'selected': False
            }
        ])
Esempio n. 8
0
 def build_changelist_choices(request, model_class, modeladmin, index=0):
     changelist = ChangeList(
         request,
         model_class,
         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,
     )
     filterspec = changelist.get_filters(request)[0][index]
     choices = filterspec.choices(changelist)
     return choices