def get_form(self, request, obj=None, **kwargs): """ Returns a Form class for use in the admin add view. This is used by add_view and change_view. """ if self.declared_fieldsets: fields = flatten_fieldsets(self.declared_fieldsets) else: fields = None if self.exclude is None: exclude = [] else: exclude = list(self.exclude) exclude.extend(kwargs.get("exclude", [])) exclude.extend(self.get_readonly_fields(request, obj)) # if exclude is an empty list we pass None to be consistant with the # default on modelform_factory exclude = exclude or None defaults = { "form": self.form, "fields": fields, "exclude": exclude, "formfield_callback": curry(self.formfield_for_dbfield, request=request), } defaults.update(kwargs) new_form = translation_modelform_factory(self.model, **defaults) current_language = get_language_from_request(request) translation_obj = self.get_translation(request, obj) new_form.base_fields[self.language_field].widget = LanguageWidget( translation_of_obj=obj, translation_obj=translation_obj ) new_form.base_fields[self.language_field].initial = current_language return new_form
def response_change(self, request, obj): response = super(RealTranslationAdmin, self).response_change(request, obj) language = get_language_from_request(request) if response.status_code == 302 and response._headers['location'][1] == request.path: location = response._headers['location'] response._headers['location'] = (location[0], "%s?language=%s" % (location[1], language)) return response
def response_add(self, request, obj, post_url_continue='../%s/'): response = super(RealTranslationAdmin, self).response_add(request, obj, post_url_continue) if request.POST.has_key("_continue"): language = get_language_from_request(request) location = response._headers['location'] response._headers['location'] = (location[0], "%s?language=%s" % (location[1], language)) return response
def get_form(self, request, obj=None, **kwargs): """ Returns a Form class for use in the admin add view. This is used by add_view and change_view. """ if self.declared_fieldsets: fields = flatten_fieldsets(self.declared_fieldsets) else: fields = None if self.exclude is None: exclude = [] else: exclude = list(self.exclude) exclude.extend(kwargs.get("exclude", [])) exclude.extend(self.get_readonly_fields(request, obj)) # if exclude is an empty list we pass None to be consistant with the # default on modelform_factory exclude = exclude or None defaults = { "form": self.form, "fields": fields, "exclude": exclude, "formfield_callback": curry(self.formfield_for_dbfield, request=request), } defaults.update(kwargs) new_form = translation_modelform_factory(self.model, **defaults) current_language = get_language_from_request(request) translation_obj = self.get_translation(request, obj) new_form.base_fields[self.language_field].widget = LanguageWidget( translation_of_obj=obj, translation_obj=translation_obj ) new_form.base_fields[self.language_field].initial = current_language return new_form
def response_add(self, request, obj, post_url_continue='../%s/'): response = super(RealTranslationAdmin, self).response_add(request, obj, post_url_continue) if request.POST.has_key("_continue"): language = get_language_from_request(request) location = response._headers['location'] response._headers['location'] = (location[0], "%s?language=%s" % (location[1], language)) return response
def response_change(self, request, obj): response = super(RealTranslationAdmin, self).response_change(request, obj) language = get_language_from_request(request) if response.status_code == 302 and response._headers['location'][1] == request.path: location = response._headers['location'] response._headers['location'] = (location[0], "%s?language=%s" % (location[1], language)) return response
def get_translation(self, request, obj): language = get_language_from_request(request) if obj: get_kwargs = { self.translation_of_field: obj, self.language_field: language } try: return self.translated_model.objects.get(**get_kwargs) except: return self.translated_model(**get_kwargs) return self.translated_model(**{self.language_field: language})
def get_translation(self, request, obj): language = get_language_from_request(request) if obj: get_kwargs = { self.translation_of_field: obj, self.language_field: language } try: return self.translated_model.objects.get(**get_kwargs) except: return self.translated_model(**get_kwargs) return self.translated_model(**{self.language_field: language})
def delete_translation(self, request, object_id, extra_context=None): language = get_language_from_request(request) opts = self.model._meta translationopts = self.translated_model._meta app_label = translationopts.app_label try: obj = self.queryset(request).get(pk=unquote(object_id)) except self.model.DoesNotExist: # Don't raise Http404 just yet, because we haven't checked # permissions yet. We don't want an unauthenticated user to be able # to determine whether a given object exists. obj = None if not self.has_delete_permission(request, obj): raise PermissionDenied if obj is None: raise Http404(_('%(name)s object with primary key %(key)r does not exist.') % {'name': force_unicode(opts.verbose_name), 'key': escape(object_id)}) if not len(translation_pool.annotate_with_translations(obj).translations) > 1: raise Http404(_('There only exists one translation for this page')) translationobj = get_object_or_404(self.translated_model, **{self.translation_of_field + '__id': object_id, 'language': language}) using = router.db_for_write(self.model) deleted_objects, perms_needed = get_deleted_objects([translationobj], translationopts, request.user, self.admin_site, using) if request.method == 'POST': if perms_needed: raise PermissionDenied message = _('%(obj_name)s with language %(language)s was deleted') % { 'language': [name for code, name in settings.LANGUAGES if code == language][0], 'obj_name': force_unicode(translationopts.verbose_name)} self.log_change(request, translationobj, message) self.message_user(request, message) translationobj.delete() if not self.has_change_permission(request, None): return HttpResponseRedirect("../../../../") return HttpResponseRedirect("../../") context = { "title": _("Are you sure?"), "object_name": force_unicode(translationopts.verbose_name), "object": translationobj, "deleted_objects": deleted_objects, "perms_lacking": perms_needed, "opts": translationopts, "root_path": self.admin_site.root_path, "app_label": app_label, } context.update(extra_context or {}) context_instance = RequestContext(request, current_app=self.admin_site.name) return render_to_response(self.delete_confirmation_template or [ "admin/%s/%s/delete_confirmation.html" % (app_label, translationopts.object_name.lower()), "admin/%s/delete_confirmation.html" % app_label, "admin/delete_confirmation.html" ], context, context_instance=context_instance)
def placeholder_plugin_filter(self, request, queryset): language = get_language_from_request(request) return queryset.filter(language=language)
def delete_translation(self, request, object_id, extra_context=None): language = get_language_from_request(request) opts = self.model._meta translationopts = self.translated_model._meta app_label = translationopts.app_label try: obj = self.queryset(request).get(pk=unquote(object_id)) except self.model.DoesNotExist: # Don't raise Http404 just yet, because we haven't checked # permissions yet. We don't want an unauthenticated user to be able # to determine whether a given object exists. obj = None if not self.has_delete_permission(request, obj): raise PermissionDenied if obj is None: raise Http404(_('%(name)s object with primary key %(key)r does not exist.') % {'name': force_text(opts.verbose_name), 'key': escape(object_id)}) if not len(translation_pool.annotate_with_translations(obj).translations) > 1: raise Http404(_('There only exists one translation for this page')) translationobj = get_object_or_404(self.translated_model, **{self.translation_of_field + '__id': object_id, 'language': language}) if django.VERSION[1] > 2: # pragma: no cover # WARNING: Django 1.3 is not officially supported yet! using = router.db_for_read(self.model) kwargs = { 'admin_site': self.admin_site, 'user': request.user, 'using': using } else: kwargs = { 'admin_site': self.admin_site, 'user': request.user, } deleted_objects, perms_needed = get_deleted_objects([translationobj], translationopts, **kwargs)[:2] if request.method == 'POST': if perms_needed: raise PermissionDenied message = _('%(obj_name)s with language %(language)s was deleted') % { 'language': [name for code, name in settings.LANGUAGES if code == language][0], 'obj_name': force_text(translationopts.verbose_name)} self.log_change(request, translationobj, message) self.message_user(request, message) translationobj.delete() if not self.has_change_permission(request, None): return HttpResponseRedirect("../../../../") return HttpResponseRedirect("../../") context = { "title": _("Are you sure?"), "object_name": force_text(translationopts.verbose_name), "object": translationobj, "deleted_objects": deleted_objects, "perms_lacking": perms_needed, "opts": translationopts, "root_path": self.admin_site.root_path, "app_label": app_label, } context.update(extra_context or {}) context_instance = RequestContext(request, current_app=self.admin_site.name) return render_to_response(self.delete_confirmation_template or [ "admin/%s/%s/delete_confirmation.html" % (app_label, translationopts.object_name.lower()), "admin/%s/delete_confirmation.html" % app_label, "admin/delete_confirmation.html" ], context, context_instance=context_instance)
def placeholder_plugin_filter(self, request, queryset): language = get_language_from_request(request) return queryset.filter(language=language)