def save_model(self, request, obj, form, change): super(ResourceAdmin, self).save_model(request, obj, form, change) model = obj.content_type.model_class() modeladmin = type(get_modeladmin(model)) resources = obj.content_type.resource_set.filter(is_active=True) inlines = [] for inline in modeladmin.inlines: if inline.model is ResourceData: inline = resource_inline_factory(resources) inlines.append(inline) modeladmin.inlines = inlines
def change_view(self, request, object_id): modeladmin = get_modeladmin(User) user = self.get_user(request, object_id) self.user = user obj = None exists = self.exists if exists: obj = getattr(user, self.name) form_class = self.form if self.form else role_form_factory(self) form = form_class(instance=obj) opts = User._meta app_label = opts.app_label title = _("Add %s for user %s" % (self.name, user)) action = _("Create") # User has submitted the form if request.method == 'POST': form = form_class(request.POST, instance=obj) form.user = user if form.is_valid(): obj = form.save() context = { 'name': obj._meta.verbose_name, 'obj': obj, 'action': _("saved" if exists else "created") } modeladmin.log_change(request, request.user, "%s saved" % self.name.capitalize()) msg = _('The role %(name)s for user "%(obj)s" was %(action)s successfully.') % context modeladmin.message_user(request, msg, messages.SUCCESS) url = 'admin:%s_%s_change' % (opts.app_label, opts.module_name) if not "_continue" in request.POST: return redirect(url, object_id) exists = True if exists: title = _("Change %s %s settings" % (user, self.name)) action = _("Save") form = form_class(instance=obj) context = { 'title': title, 'opts': opts, 'app_label': app_label, 'form': form, 'action': action, 'role': self, 'roles': [ role(user=user) for role in modeladmin.roles ], 'media': modeladmin.media } template = 'admin/users/user/role.html' app = modeladmin.admin_site.name return TemplateResponse(request, template, context, current_app=app)
def insert_resource_inlines(): # Clean previous state for related in Resource._related: modeladmin = get_modeladmin(related) modeladmin_class = type(modeladmin) for inline in getattr(modeladmin_class, 'inlines', []): if inline.__name__ == 'ResourceInline': modeladmin_class.inlines.remove(inline) resources = Resource.objects.filter(is_active=True) for ct, resources in resources.group_by('content_type').items(): inline = resource_inline_factory(resources) model = ct.model_class() insertattr(model, 'inlines', inline)
def save_model(self, request, obj, form, change): super(ResourceAdmin, self).save_model(request, obj, form, change) # best-effort model = obj.content_type.model_class() modeladmin = type(get_modeladmin(model)) resources = obj.content_type.resource_set.filter(is_active=True) inlines = [] for inline in modeladmin.inlines: if inline.model is ResourceData: inline = resource_inline_factory(resources) inlines.append(inline) modeladmin.inlines = inlines # reload Not always work sys.touch_wsgi()
def delete_view(self, request, object_id): "The 'delete' admin view for this model." opts = self.model._meta app_label = opts.app_label modeladmin = get_modeladmin(User) user = self.get_user(request, object_id) obj = getattr(user, self.name) using = router.db_for_write(self.model) # Populate deleted_objects, a data structure of all related objects that # will also be deleted. (deleted_objects, perms_needed, protected) = get_deleted_objects( [obj], opts, request.user, modeladmin.admin_site, using) if request.POST: # The user has already confirmed the deletion. if perms_needed: raise PermissionDenied obj_display = force_text(obj) modeladmin.log_deletion(request, obj, obj_display) modeladmin.delete_model(request, obj) post_url = reverse('admin:users_user_change', args=(user.pk,)) preserved_filters = modeladmin.get_preserved_filters(request) post_url = add_preserved_filters( {'preserved_filters': preserved_filters, 'opts': opts}, post_url ) return HttpResponseRedirect(post_url) object_name = force_text(opts.verbose_name) if perms_needed or protected: title = _("Cannot delete %(name)s") % {"name": object_name} else: title = _("Are you sure?") context = { "title": title, "object_name": object_name, "object": obj, "deleted_objects": deleted_objects, "perms_lacking": perms_needed, "protected": protected, "opts": opts, "app_label": app_label, 'preserved_filters': modeladmin.get_preserved_filters(request), 'role': self, } return TemplateResponse(request, 'admin/users/user/delete_role.html', context, current_app=modeladmin.admin_site.name)
def formfield_for_dbfield(self, db_field, **kwargs): if db_field.name == 'value': kwargs['widget'] = forms.TextInput(attrs={'size':'100'}) if db_field.name == 'name': if self.parent_object: plugin = self.parent_object.type_class else: request = kwargs['request'] webapp_modeladmin = get_modeladmin(self.parent_model) plugin_value = webapp_modeladmin.get_plugin_value(request) plugin = AppType.get(plugin_value) kwargs['choices'] = plugin.get_group_options_choices() # Help text based on select widget target = 'this.id.replace("name", "value")' kwargs['widget'] = DynamicHelpTextSelect(target, self.OPTIONS_HELP_TEXT) return super(WebAppOptionInline, self).formfield_for_dbfield(db_field, **kwargs)
context = { 'contact_id': contact.pk, 'title': _("Add %s for %s") % (opts.verbose_name, contact.full_name) } context.update(extra_context or {}) return super(ContractAdminMixin, self).add_view(request, form_url=form_url, extra_context=context) return HttpResponseRedirect('./select-contact/') def log_addition(self, request, object): """ Create a contract when a new object is created """ if not request.user.is_superuser: contact = request.user.contact elif 'contact_id' in request.GET: contact = Contact.objects.get(pk=request.GET['contact_id']) else: contact = Contact.objects.get() Contract.objects.create(contact=contact, content_object=object) super(ContractAdminMixin, self).log_addition(request, object) for model_label in settings.CONTACTS_CONTRACT_MODELS: # Hook ContractAdminMixin to CONTACTS_CONTRACT_MODELS model admins model = get_model(model_label) modeladmin = get_modeladmin(model) if ContractAdminMixin not in type(modeladmin).__mro__: bases = (ContractAdminMixin,) + type(modeladmin).__bases__ if admin.ModelAdmin not in bases: raise TypeError('%s admin needs a declared admin class' % model_label) type(modeladmin).__bases__ = bases