Revision c72a830d ui/userdata/rest.py

b/ui/userdata/rest.py
4 4
from django.core import serializers
5 5
from django.core.urlresolvers import reverse
6 6

  
7
from django.core.exceptions import ValidationError, NON_FIELD_ERRORS
8

  
7 9
# base view class
8 10
# https://github.com/bfirsh/django-class-based-views/blob/master/class_based_views/base.py
9 11
class View(object):
......
62 64
                        raise http.HttpResponseServerError('Invalid JSON data.')
63 65
                else:
64 66
                    raise http.HttpResponseServerError('Unsupported Content-Type.')
67
            try:
68
                return getattr(self, request.method.upper())(request, data, *args, **kwargs)
69
            except ValidationError, e:
70
                # specific response for validation errors
71
                return http.HttpResponseServerError(json.dumps({'errors':
72
                    e.message_dict, 'non_field_key':
73
                    NON_FIELD_ERRORS }))
65 74

  
66
            return getattr(self, request.method.upper())(request, data, *args, **kwargs)
67 75
        else:
68 76
            allowed_methods = [m for m in self.method_names if hasattr(self, m)]
69 77
            return http.HttpResponseNotAllowed(allowed_methods)
......
137 145
    def PUT(self, request, data, *args, **kwargs):
138 146
        instance = self.instance()
139 147
        self.update_instance(instance, data, self.exclude_fields)
148
        instance.full_clean()
140 149
        instance.save()
141 150
        return self.GET(request, data, *args, **kwargs)
142 151

  
......
161 170
    def POST(self, request, data, *args, **kwargs):
162 171
        instance = self.model()
163 172
        self.update_instance(instance, data, self.exclude_fields)
173
        instance.full_clean()
164 174
        instance.save()
165 175
        return self.json_response(self.instance_to_dict(instance,
166 176
            self.exclude_fields))
......
184 194
        instance = self.model()
185 195
        self.update_instance(instance, data, self.exclude_fields)
186 196
        instance.user = request.user
197
        instance.full_clean()
187 198
        instance.save()
188 199
        return self.json_response(self.instance_to_dict(instance,
189 200
            self.exclude_fields))

Also available in: Unified diff