def test_default_foreign_key_widget(self): # First, without any radio_fields specified, the widgets for ForeignKey # and fields with choices specified ought to be a basic Select widget. # ForeignKey widgets in the admin are wrapped with RelatedFieldWidgetWrapper so # they need to be handled properly when type checking. For Select fields, all of # the choices lists have a first entry of dashes. cma = ModelAdmin(Concert, self.site) cmafa = cma.get_form(request) self.assertEqual(type(cmafa.base_fields['main_band'].widget.widget), Select) self.assertEqual( list(cmafa.base_fields['main_band'].widget.choices), [('', '---------'), (self.band.id, 'The Doors')]) self.assertEqual(type(cmafa.base_fields['opening_band'].widget.widget), Select) self.assertEqual( list(cmafa.base_fields['opening_band'].widget.choices), [('', '---------'), (self.band.id, 'The Doors')] ) self.assertEqual(type(cmafa.base_fields['day'].widget), Select) self.assertEqual( list(cmafa.base_fields['day'].widget.choices), [('', '---------'), (1, 'Fri'), (2, 'Sat')] ) self.assertEqual(type(cmafa.base_fields['transport'].widget), Select) self.assertEqual( list(cmafa.base_fields['transport'].widget.choices), [('', '---------'), (1, 'Plane'), (2, 'Train'), (3, 'Bus')])
def test_default_foreign_key_widget(self): # First, without any radio_fields specified, the widgets for ForeignKey # and fields with choices specified ought to be a basic Select widget. # ForeignKey widgets in the admin are wrapped with RelatedFieldWidgetWrapper so # they need to be handled properly when type checking. For Select fields, all of # the choices lists have a first entry of dashes. cma = ModelAdmin(Concert, self.site) cmafa = cma.get_form(request) self.assertEqual(type(cmafa.base_fields["main_band"].widget.widget), Select) self.assertEqual( list(cmafa.base_fields["main_band"].widget.choices), [("", "---------"), (self.band.id, "The Doors")] ) self.assertEqual(type(cmafa.base_fields["opening_band"].widget.widget), Select) self.assertEqual( list(cmafa.base_fields["opening_band"].widget.choices), [("", "---------"), (self.band.id, "The Doors")] ) self.assertEqual(type(cmafa.base_fields["day"].widget), Select) self.assertEqual(list(cmafa.base_fields["day"].widget.choices), [("", "---------"), (1, "Fri"), (2, "Sat")]) self.assertEqual(type(cmafa.base_fields["transport"].widget), Select) self.assertEqual( list(cmafa.base_fields["transport"].widget.choices), [("", "---------"), (1, "Plane"), (2, "Train"), (3, "Bus")], )
def test_log_actions(self): ma = ModelAdmin(Band, self.site) mock_request = MockRequest() mock_request.user = User.objects.create(username='******') self.assertEqual(ma.log_addition(mock_request, self.band, 'added'), LogEntry.objects.latest('id')) self.assertEqual(ma.log_change(mock_request, self.band, 'changed'), LogEntry.objects.latest('id')) self.assertEqual(ma.log_change(mock_request, self.band, 'deleted'), LogEntry.objects.latest('id'))
def change_decision_via_admin(self, decision, new_organization=None): """ Used for testing custom behaviour for Decision change in django admin - see publicweb/admin.py, DecisionAdmin.save_model() Requirement: logged in user is_staff and is_superuser. """ ma = ModelAdmin(Decision, AdminSite()) data = ma.get_form(None)(instance=decision).initial for key, value in data.items(): if value == None: data[key] = u'' man_data = { 'feedback_set-TOTAL_FORMS': u'1', 'feedback_set-INITIAL_FORMS': u'0', 'feedback_set-MAX_NUM_FORMS': u'' } data.update(man_data) if new_organization: data['organization'] = new_organization.id url = reverse('admin:publicweb_decision_change', args=[decision.id]) response = self.client.post(url, data, follow=True) self.assertEquals( response.template_name, 'admin/decision_change_list.html', "Failed to edit Decision via admin screen") decision = Decision.objects.get(id=decision.id) if new_organization: self.assertEquals(decision.organization.id, new_organization.id)
def change_organization_via_admin_screens(self, decision, new_organization=None): orig_user = self.user admin_user = User.objects.filter(is_staff=True)[0] self.login(admin_user.username) ma = ModelAdmin(Decision, AdminSite()) data = ma.get_form(None)(instance=decision).initial for key, value in data.items(): if value == None: data[key] = u'' man_data = { 'feedback_set-TOTAL_FORMS': u'1', 'feedback_set-INITIAL_FORMS': u'0', 'feedback_set-MAX_NUM_FORMS': u'' } data.update(man_data) if new_organization: data['organization'] = new_organization.id url = reverse('admin:publicweb_decision_change', args=[decision.id]) response = self.client.post(url, data, follow=True) self.assertEquals(response.status_code, 200) if new_organization: self.assertEquals(Decision.objects.get(id=decision.id).organization.id, new_organization.id) self.login(orig_user) return admin_user
def test_default_fields(self): ma = ModelAdmin(Band, self.site) self.assertEqual(list(ma.get_form(request).base_fields), ["name", "bio", "sign_date"]) self.assertEqual(list(ma.get_fields(request)), ["name", "bio", "sign_date"]) self.assertEqual(list(ma.get_fields(request, self.band)), ["name", "bio", "sign_date"])
def test_VATINField_admin(self): """Admin form is generated.""" ma = ModelAdmin(VIESModel, self.site) try: ma.get_form(request) except Exception as e: self.fail(e.message)
def test_fields(self): ma = ModelAdmin(CustomUser, self.site) expected = ['password', 'last_login', 'is_superuser', 'groups', 'user_permissions', 'email', 'is_active', 'is_admin', 'is_staff', 'is_company_admin', 'avatar', 'name', 'activation_key', 'company'] self.assertEqual(expected, ma.get_form(None).base_fields.keys())
def test_default_ordering(self): """ The default ordering should be by name, as specified in the inner Meta class. """ ma = ModelAdmin(Band, site) names = [b.name for b in ma.get_queryset(request)] self.assertEqual(['Aerosmith', 'Radiohead', 'Van Halen'], names)
def test_get_deleted_objects(self): mock_request = MockRequest() mock_request.user = User.objects.create_superuser(username='******', email='*****@*****.**', password='******') ma = ModelAdmin(Band, self.site) deletable_objects, model_count, perms_needed, protected = ma.get_deleted_objects([self.band], request) self.assertEqual(deletable_objects, ['Band: The Doors']) self.assertEqual(model_count, {'bands': 1}) self.assertEqual(perms_needed, set()) self.assertEqual(protected, [])
def test_default_fieldsets(self): # fieldsets_add and fieldsets_change should return a special data structure that # is used in the templates. They should generate the "right thing" whether we # have specified a custom form, the fields argument, or nothing at all. # # Here's the default case. There are no custom form_add/form_change methods, # no fields argument, and no fieldsets argument. ma = ModelAdmin(Band, self.site) self.assertEqual(ma.get_fieldsets(request), [(None, {'fields': ['name', 'bio', 'sign_date']})]) self.assertEqual(ma.get_fieldsets(request, self.band), [(None, {'fields': ['name', 'bio', 'sign_date']})])
def test_has_module_permission(self): """ as_module_permission returns True for users who have any permission for the module and False for users who don't. """ ma = ModelAdmin(Band, AdminSite()) request = MockRequest() request.user = self.MockViewUser() self.assertIs(ma.has_module_permission(request), True) request.user = self.MockAddUser() self.assertTrue(ma.has_module_permission(request)) request.user = self.MockChangeUser() self.assertTrue(ma.has_module_permission(request)) request.user = self.MockDeleteUser() self.assertTrue(ma.has_module_permission(request)) original_app_label = ma.opts.app_label ma.opts.app_label = 'anotherapp' try: request.user = self.MockViewUser() self.assertIs(ma.has_module_permission(request), False) request.user = self.MockAddUser() self.assertFalse(ma.has_module_permission(request)) request.user = self.MockChangeUser() self.assertFalse(ma.has_module_permission(request)) request.user = self.MockDeleteUser() self.assertFalse(ma.has_module_permission(request)) finally: ma.opts.app_label = original_app_label
def test_get_actions_requires_change_perm(self): user = User.objects.create_user(username='******', email='*****@*****.**', password='******') mock_request = MockRequest() mock_request.user = user mock_request.GET = {} ma = ModelAdmin(Band, self.site) self.assertEqual(list(ma.get_actions(mock_request).keys()), []) p = Permission.objects.get(codename='change_band', content_type=get_content_type_for_model(Band())) user.user_permissions.add(p) mock_request.user = User.objects.get(pk=user.pk) self.assertEqual(list(ma.get_actions(mock_request).keys()), ['delete_selected'])
def test_fieldsets(self): user = UserFactory() ma = ModelAdmin(CustomUser, self.site) expected = [ (None, { 'fields': [ 'password', 'last_login', 'is_superuser', 'groups', 'user_permissions', 'email', 'is_active', 'is_admin', 'is_staff', 'is_company_admin', 'avatar', 'name', 'activation_key', 'company'] }) ] self.assertEqual(expected, ma.get_fieldsets(None, user))
def test_has_delete_permission(self): """ has_delete_permission returns True for users who can delete objects and False for users who can't. """ ma = ModelAdmin(Band, AdminSite()) request = MockRequest() request.user = self.MockAddUser() self.assertFalse(ma.has_delete_permission(request)) request.user = self.MockChangeUser() self.assertFalse(ma.has_delete_permission(request)) request.user = self.MockDeleteUser() self.assertTrue(ma.has_delete_permission(request))
def test_has_view_permission(self): """ has_view_permission() returns True for users who can view objects and False for users who can't. """ ma = ModelAdmin(Band, AdminSite()) request = MockRequest() request.user = self.MockViewUser() self.assertIs(ma.has_view_permission(request), True) request.user = self.MockAddUser() self.assertIs(ma.has_view_permission(request), False) request.user = self.MockChangeUser() self.assertIs(ma.has_view_permission(request), True) request.user = self.MockDeleteUser() self.assertIs(ma.has_view_permission(request), False)
def add(request): """ Process the add form. """ model = get_model(request.POST["app"], request.POST["model"]) if not can("add", model, request.user): return {"valid": True, "permissionerror":"You don't have permission to add!"} obj = model() form = get_model_form(obj, request.POST["fields"], data=request.POST,\ files=request.FILES, parent_model_related_name=request.POST["parent_model_related_name"],\ parent_model=request.POST["parent_model"], \ parent_id = request.POST["parent_id"]) if form.is_valid(): saved_obj=form.save() 'Create change message' try: model_admin = ModelAdmin(model, admin.site) message = model_admin.construct_change_message(request, form, None) model_admin.log_change(request, saved_obj, message) except Exception: pass data = { 'id': saved_obj.id, 'valid': True, } else: "from django_ajax_validation" errors = form.errors formfields = dict([(fieldname, form[fieldname]) for fieldname in form.fields.keys()]) final_errors = {} for key, val in errors.iteritems(): if '__all__' in key: final_errors[key] = val else:# not isinstance(formfields[key].field): html_id = formfields[key].field.widget.attrs.get('id') or formfields[key].auto_id html_id = formfields[key].field.widget.id_for_label(html_id) final_errors[html_id] = val data = { 'valid': False, 'errors': final_errors, } return data
def edit_bbn(self, request, extra_context=None): from django.contrib.admin.options import ModelAdmin # opts = self.model._meta # admin_site = self.admin_site # has_perm = request.user.has_perm(opts.app_label + '.' + opts.get_change_permission()) bifsets = BifSettings.objects.all() self.change_list_template = "admin/survey/bifsettings/change_list.html" return ModelAdmin.changelist_view (self, request, extra_context)
def edit(request): """ Process the inline editing form. """ model = get_model(request.POST["app"], request.POST["model"]) obj = model.objects.get(id=request.POST["id"]) form = get_edit_form(obj, request.POST["fields"], data=request.POST, files=request.FILES) if not is_editable(obj, request): response = _("Permission denied") elif form.is_valid(): form.save() model_admin = ModelAdmin(model, admin.site) message = model_admin.construct_change_message(request, form, None) model_admin.log_change(request, obj, message) response = "" else: response = form.errors.values()[0][0] return HttpResponse(unicode(response))
def edit(request): """ Process the inline editing form. """ try: model = get_model(request.POST["app"], request.POST["model"]) if not can("change", model, request.user): return {"valid": True, "permissionerror":"You don't have permission to edit!"} obj = model.objects.get(id=request.POST["id"]) form = get_model_form(obj, request.POST["fields"], data=request.POST, files=request.FILES) except Exception: pass if form.is_valid(): form.save() model_admin = ModelAdmin(model, admin.site) message = model_admin.construct_change_message(request, form, None) model_admin.log_change(request, obj, message) data = { 'valid': True } else: "from django_ajax_validation" errors = form.errors formfields = dict([(fieldname, form[fieldname]) for fieldname in form.fields.keys()]) # pprint (errors) final_errors = {} for key, val in errors.iteritems(): if '__all__' in key: final_errors[key] = val elif not isinstance(formfields[key].field): html_id = formfields[key].field.widget.attrs.get('id') or formfields[key].auto_id html_id = formfields[key].field.widget.id_for_label(html_id) final_errors[html_id] = val data = { 'valid': False, 'errors': final_errors, } return data
def admin_change_form(self, request, object_id, form_url='', extra_context={}): from django.contrib.admin.options import ModelAdmin import json self.change_form_template = "admin/survey/bifsettings/change_form.html" bif = BifSettings.objects.get(id=object_id) if len(bif.bif) == 0: extra_context['bbn_settings'] = get_bbn_nodes() bif.bif = json.dumps(extra_context['bbn_settings']) bif.save() else: import ast extra_context["bbn_settings"] = ast.literal_eval(bif.bif) extra_context['bbn_str'] = json.dumps(extra_context['bbn_settings']) return ModelAdmin.change_view(self, request, object_id, form_url, extra_context)
def test_queryset_override(self): # If the queryset of a ModelChoiceField in a custom form is overridden, # RelatedFieldWidgetWrapper doesn't mess that up. band2 = Band.objects.create(name='The Beatles', bio='', sign_date=date(1962, 1, 1)) ma = ModelAdmin(Concert, self.site) form = ma.get_form(request)() self.assertHTMLEqual( str(form["main_band"]), '<div class="related-widget-wrapper">' '<select name="main_band" id="id_main_band" required>' '<option value="" selected>---------</option>' '<option value="%d">The Beatles</option>' '<option value="%d">The Doors</option>' '</select></div>' % (band2.id, self.band.id) ) class AdminConcertForm(forms.ModelForm): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.fields["main_band"].queryset = Band.objects.filter(name='The Doors') class ConcertAdminWithForm(ModelAdmin): form = AdminConcertForm ma = ConcertAdminWithForm(Concert, self.site) form = ma.get_form(request)() self.assertHTMLEqual( str(form["main_band"]), '<div class="related-widget-wrapper">' '<select name="main_band" id="id_main_band" required>' '<option value="" selected>---------</option>' '<option value="%d">The Doors</option>' '</select></div>' % self.band.id )
def test_modeladmin_str(self): ma = ModelAdmin(Slide, self.site) self.assertEqual(str(ma), 'brain.ModelAdmin')
def test_modeladmin_str(self): ma = ModelAdmin(CertificateAuthority, self.site) self.assertEqual(str(ma), 'modeladmin.ModelAdmin')
def test_modelAdmin_str(self): ma = ModelAdmin(Product, self.site) self.assertEqual(str(ma), 'product_catalog.ModelAdmin')
def test_should_show_column_defined(self): question_expected = ['question', 'choices'] question_model_admin = ModelAdmin(Question, self.site) self.assertEqual(list(question_model_admin.get_fields(request)), question_expected)
def auth_token_model_admin(self): return ModelAdmin(AuthToken, AdminSite())
def test_default_fields(self): ma = ModelAdmin(Band, self.site) self.assertEqual(list(ma.get_form(request).base_fields), ['name', 'bio', 'sign_date']) self.assertEqual(list(ma.get_fields(request)), ['name', 'bio', 'sign_date']) self.assertEqual(list(ma.get_fields(request, self.band)), ['name', 'bio', 'sign_date']) self.assertIsNone(ma.get_exclude(request, self.band))
def test_modeladmin_str(self): model_admin = ModelAdmin(User, self.site) self.assertEqual(str(model_admin), 'accounts.ModelAdmin')
def test_referencephraseadmin_str(self): ref_phrase = ModelAdmin(ReferencePhrases, self.site) self.assertEqual(str(ref_phrase), 'medicalreport.ModelAdmin')
def test_default_attributes(self): ma = ModelAdmin(Band, self.site) self.assertEqual(ma.actions, ()) self.assertEqual(ma.inlines, ())
def test_modeladmin_repr(self): ma = ModelAdmin(Band, self.site) self.assertEqual( repr(ma), "<ModelAdmin: model=Band site=AdminSite(name='admin')>", )
def test_modeladmin_str(self): ma = ModelAdmin(Band, self.site) self.assertEqual(str(ma), 'modeladmin.ModelAdmin')
def admin_add_form(self, request, form_url='', extra_context=None): from django.contrib.admin.options import ModelAdmin self.add_form_template = "admin/survey/bifsettings/change_form.html" return ModelAdmin.add_view(self, request, form_url, extra_context)
def test_default_fields(self): ma = ModelAdmin(Band, self.site) self.assertEquals(ma.get_form(request).base_fields.keys(), ['name', 'bio', 'sign_date'])
def test_modeladmin_str(self): ma = ModelAdmin(Factory, self.site) self.assertEqual(str(ma), "api.ModelAdmin")
def queryset(self, request): query_set = ModelAdmin.queryset(self, request) user = request.user if user.is_superuser: return query_set return query_set.filter(app_key__exact=user.get_profile().app_key.unique_token)
def test_fieldset(self): ma = ModelAdmin(Programme, self.site) self.assertEqual( ma.get_fields(None), ['name', 'synopsis', 'photo', 'language', 'current_season', 'category', 'slug', '_runtime', 'start_date', 'end_date'])
def test_default_fields(self): ma = ModelAdmin(OSBUAdvisor, self.site) self.assertEqual( list(ma.get_form(self.client).base_fields), ['name', 'email', 'phone'] )
def change_view(self, request, object_id, form_url='', extra_context=None): self.inlines = [QuestionGroup_SettingInLine, Chapter_SettingInLine] return ModelAdmin.change_view(self, request, object_id, form_url=form_url, extra_context=extra_context)
def test_default_fields(self): ma = ModelAdmin(OSBUAdvisor, self.site) self.assertEqual(list(ma.get_form(self.client).base_fields), ['name', 'email', 'phone'])
def add_view(self, request, form_url='', extra_context=None): self.inlines = [] return ModelAdmin.add_view(self, request, form_url=form_url, extra_context=extra_context)
def test_fieldset(self): ma = ModelAdmin(Programme, self.site) self.assertEqual(ma.get_fields(None), [ 'name', 'synopsis', 'photo', 'language', 'current_season', 'category', 'slug', '_runtime', 'start_date', 'end_date' ])