Advertisement
rfmonk

st_ov_qu112813.py

Nov 29th, 2013
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.64 KB | None | 0 0
  1. #! /usr/bin/env python
  2.  
  3. """
  4. stack overflow question for django
  5. Question was 'How to share database errors with django admin'
  6. the part is the answer the second part is what the person said
  7. took to get it to work"""
  8.  
  9. # first part 'Answer'
  10. from django.contrib import admin
  11. from django import forms
  12. from django.contrib.admin.options import csrf_protect_m, IS_POPUP_VAR
  13. from django.utils.translation import ugettext as _
  14. from django.utils.encoding import force_text
  15.  
  16. # for nonfield errors to show correctly
  17. from django.forms.forms import NON_FIELD_ERRORS
  18.  
  19. from .models import TestModel
  20.  
  21. class TestModelAdmin(admin.ModelAdmin):
  22.     def save_model(self, request, obj, form, change):
  23.         raise Exception('test exception')
  24.  
  25.     @csrf_protect_m
  26.     def add_view(self, request, form_url='', extra_context=None):
  27.         try:
  28.             return super(TestModelAdmin, self).add_view(request, form_url, extra_context)
  29.         except Exception as e:
  30.             pass
  31.  
  32.         # mimic parent class on error
  33.  
  34.         model = self.model
  35.         opts = model._meta
  36.  
  37.         ModelForm = self.get_form(request)
  38.         formsets = []
  39.         inline_instances = self.get_inline_instances(request, None)
  40.         form = ModelForm(request.POST, request.FILES)
  41.         form.is_valid()
  42.  
  43.         # make faked nonfield error
  44.         form.errors[NON_FIELD_ERRORS] = form.error_class([e.message])
  45.  
  46.         # We may handle exceptions here (just to save indentation)
  47.         adminForm = helpers.AdminForm(form, list(self.get_fieldsets(request)),
  48.             self.get_prepopulated_fields(request),
  49.             self.get_readonly_fields(request),
  50.             model_admin=self)
  51.         media = self.media + adminForm.media
  52.  
  53.         inline_admin_formsets = []
  54.         for inline, formset in zip(inline_instances, formsets):
  55.             fieldsets = list(inline.get_fieldsets(request))
  56.             readonly = list(inline.get_readonly_fields(request))
  57.             prepopulated = dict(inline.get_prepopulated_fields(request))
  58.             inline_admin_formset = helpers.InlineAdminFormSet(inline, formset, \
  59.                 fieldsets, prepopulated, readonly, model_admin=self)
  60.             inline_admin_formsets.append(inline_admin_formset)
  61.             media = media + inline_admin_formset.media
  62.  
  63.         context = {
  64.             'title': _('Add %s') % force_text(opts.verbose_name),
  65.             'adminform': adminForm,
  66.             'is_popup': IS_POPUP_VAR in request.REQUEST,
  67.             'media': media,
  68.             'inline_admin_formsets': inline_admin_formsets,
  69.             'errors': helpers.AdminErrorList(form, formsets),
  70.             'app_label': opts.app_label,
  71.             'preserved_filters': self.get_preserved_filters(request),
  72.  
  73.         }
  74.         context.update(extra_context or {})
  75.         return self.render_change_form(request, context, form_url=form_url, add=True)
  76.  
  77. admin.site.register(TestModel, TestModelAdmin)
  78.  
  79. """
  80. part 2 response
  81.  
  82. from django.contrib.admin import ModelAdmin
  83. from django.db import DatabaseError, IntegrityError
  84. from django.contrib import messages
  85.  
  86.  
  87. class ShowValidationAdmin(ModelAdmin):
  88.  
  89.    def add_view(self, request, form_url='', extra_context=None):
  90.        try:
  91.            return super(ShowValidationAdmin, self).add_view(self, request, form_url, extra_context)
  92.        except (IntegrityError, DatabaseError) as e:
  93.  
  94.            request.method = 'GET'
  95.            messages.error(request, e.message)
  96.            return super(ShowValidationAdmin, self).add_view(self, request, form_url, extra_context)
  97.  
  98.    def change_view(self, request, object_id, form_url='', extra_context=None):
  99.        try:
  100.            return super(ShowValidationAdmin, self).change_view(request, object_id, form_url, extra_context)
  101.        except (IntegrityError, DatabaseError) as e:
  102.  
  103.            request.method = 'GET'
  104.            messages.error(request, e.message)
  105.            return super(ShowValidationAdmin, self).change_view(request, object_id, form_url, extra_context)
  106. """
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement