Merge branch 'develop' into v2-develop

This commit is contained in:
Jeremy Stretch
2017-05-08 15:02:06 -04:00
committed by GitHub
34 changed files with 888 additions and 861 deletions

View File

@@ -1,4 +1,6 @@
from django.contrib import messages
from django.utils.html import escape
from django.utils.safestring import mark_safe
def handle_protectederror(obj, request, e):
@@ -25,11 +27,11 @@ def handle_protectederror(obj, request, e):
# Append dependent objects to error message
dependent_objects = []
for o in e.protected_objects:
if hasattr(o, 'get_absolute_url'):
dependent_objects.append(u'<a href="{}">{}</a>'.format(o.get_absolute_url(), o))
for obj in e.protected_objects:
if hasattr(obj, 'get_absolute_url'):
dependent_objects.append(u'<a href="{}">{}</a>'.format(obj.get_absolute_url(), escape(obj)))
else:
dependent_objects.append(str(o))
dependent_objects.append(str(obj))
err_message += u', '.join(dependent_objects)
messages.error(request, err_message)
messages.error(request, mark_safe(err_message))

View File

@@ -125,6 +125,19 @@ class ColorSelect(forms.Select):
super(ColorSelect, self).__init__(*args, **kwargs)
class BulkEditNullBooleanSelect(forms.NullBooleanSelect):
def __init__(self, *args, **kwargs):
super(BulkEditNullBooleanSelect, self).__init__(*args, **kwargs)
# Override the built-in choice labels
self.choices = (
('1', '---------'),
('2', 'Yes'),
('3', 'No'),
)
class SelectWithDisabled(forms.Select):
"""
Modified the stock Select widget to accept choices using a dict() for a label. The dict for each option must include

View File

@@ -17,7 +17,6 @@ from django.utils.http import is_safe_url
from django.utils.safestring import mark_safe
from django.views.generic import View
from extras.forms import CustomFieldForm
from extras.models import CustomField, CustomFieldValue, ExportTemplate, UserAction
from .error_handlers import handle_protectederror
@@ -195,12 +194,8 @@ class ObjectEditView(GetReturnURLMixin, View):
form = self.form_class(request.POST, request.FILES, instance=obj)
if form.is_valid():
obj = form.save(commit=False)
obj_created = not obj.pk
obj.save()
form.save_m2m()
if isinstance(form, CustomFieldForm):
form.save_custom_fields()
obj_created = not form.instance.pk
obj = form.save()
msg = u'Created ' if obj_created else u'Modified '
msg += self.model._meta.verbose_name
@@ -400,6 +395,7 @@ class BulkImportView(View):
return render(request, "import_success.html", {
'table': obj_table,
'return_url': self.default_return_url,
})
except IntegrityError as e:
@@ -423,7 +419,7 @@ class BulkEditView(View):
filter: FilterSet to apply when deleting by QuerySet
form: The form class used to edit objects in bulk
template_name: The name of the template
default_return_url: Name of the URL to which the user is redirected after editing the objects (can be overriden by
default_return_url: Name of the URL to which the user is redirected after editing the objects (can be overridden by
POSTing return_url)
"""
cls = None
@@ -475,7 +471,7 @@ class BulkEditView(View):
fields_to_update[field] = ''
else:
fields_to_update[field] = None
elif form.cleaned_data[field]:
elif form.cleaned_data[field] not in (None, ''):
fields_to_update[field] = form.cleaned_data[field]
updated_count = self.cls.objects.filter(pk__in=pk_list).update(**fields_to_update)