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)
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')
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')
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')
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
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
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 } ])