class AdminTests(base.TestCase): def setUp(self): self.site = AdminSite() self.model_admin = ModelAdmin(self.models.Links, self.site) self.links = self.models.Links.objects.create() def test_formfield_warning(self): with self.assertRaises(FutureWarning), warnings.catch_warnings(): warnings.filterwarnings('error', category=FutureWarning) self.model_admin.get_form(MockRequest(), self.links)() def test_admin(self): form = self.model_admin.get_form(MockRequest(), self.links)(instance=self.links, data={ 'related_objects': '' }) self.assertTrue(form.is_valid()) def test_submit_form(self): self.links.related_objects = [ self.models.Project.objects.create(), self.models.Task.objects.create() ] form = self.model_admin.get_form(MockRequest(), self.links)(instance=self.links, data={ 'related_objects': '' }) form.save() self.assertEqual(self.links.related_objects.all().count(), 2)
def get_form(self, request, obj=None, **kwargs): if request.method == 'POST' and obj is None: try: request.POST['dispatcher'] = Dispatcher.objects.get(name__iexact=u' '.join((request.user.last_name, request.user.first_name))) except: pass return ModelAdmin.get_form(self, request, obj=obj, **kwargs)
def test_admin_forms(self): site = AdminSite() model_admin = ModelAdmin(IntModel, site) form_clazz = model_admin.get_form(None) form_instance = form_clazz() try: form_instance.as_table() except TypeError: self.fail('HTML Rendering of the form caused a TypeError')
def app_settings(self, request, app_name): model_classes = registered_settings.get(app_name) if not model_classes: raise Http404 forms = [] fieldsets = [] model_admin = ModelAdmin(Root, self) for model_name, model in model_classes.items(): instance = getattr(settings, '%s_%s' % (app_name, model_name)) model_admin = self.registered_settings.get(model) if not model_admin: model_admin = ModelAdmin(model, self) form_class = model_admin.get_form(request, instance) form = form_class( prefix=model_name, data=request.POST or None, instance=instance ) forms.append(form) meta = getattr(model, '_meta') name = '%s %s' % (app_name.title(), meta.verbose_name) readonly_fields = model_admin.readonly_fields fields = list(form.fields.keys()) + list(readonly_fields) fs = Fieldset(form, name, readonly_fields, fields) fieldsets.append(fs) # list comprehension to evaluate all forms if all([form.is_valid() for form in forms]): for form in forms: form.save() msg = '%s settings have been saved.' % app_name.title() messages.info(request, msg) if '_save' in request.POST: url = reverse('admin:settings', current_app=self.name) return redirect(url) return redirect(request.get_full_path()) context = { 'app_name': app_name.title(), 'forms': forms, 'fieldsets': fieldsets, 'opts': FakeOpts(), 'change': True, 'is_popup': False, 'save_as': False, 'has_add_permission': False, 'has_delete_permission': False, 'has_change_permission': True, 'media': model_admin.media, } return TemplateResponse( request, 'admin/dbsettings/app_settings.html', context, current_app=self.name )
def get_form(self, request, obj=None, **kwargs): """ Push request into the ModelForm. Requires the form to override __init__ and remove request from the kwargs. See: http://stackoverflow.com/questions/1057252/how-do-i-access-the-request-object-or-any-other-variable-in-a-forms-clean-met """ ModelForm = ModelAdmin.get_form(self, request, obj, **kwargs) class ModelFormWithRequestWrapper(ModelForm): """class wrapping actual model form class to capture request""" def __new__(cls, *args, **kwargs): kwargs['request'] = request return ModelForm(*args, **kwargs) return ModelFormWithRequestWrapper
def test_confirm_email(self): ecla_admin = ModelAdmin(EmailConfirmation, self.site) ecla_form = ecla_admin.get_form(request) self.assertIn('email_field_name', ecla_form.base_fields.keys()) self.assertIn('email', ecla_form.base_fields.keys())
def test_default_fields(self): ma = ModelAdmin(Authors, self.site) self.assertEqual(ma.get_fields(self.request), ["description", "social", "user_id"]) self.assertEqual(list(ma.get_form(self.request).base_fields), ["description", "social", "user_id"])
def test_df_role_model_admin_has_fields(self): ma = ModelAdmin(DfRole, self.site) self.assertEqual(set(ma.get_form(request).base_fields), {'ldap_name', 'name', 'description'})