{% for object in generator.all %}
url(r'plstackapi/{{ object.rest_name }}/$', {{ object.camel }}List.as_view(), name='{{ object.singular }}-list'),
url(r'plstackapi/{{ object.rest_name }}/(?P<pk>[a-zA-Z0-9\-]+)/$', {{ object.camel }}Detail.as_view(), name ='{{ object.singular }}-detail'),
-# url(r'plstackapi/{{ object.rest_name }}/!new/$', {{ object.camel }}New.as_view(), name ='{{ object.singular }}-new'),
{% endfor %}
)
{{ ref }} = serializers.HyperlinkedRelatedField(read_only=True, view_name='{{ ref }}-detail')
{% endif %}
{% endfor %}
+ humanReadableName = serializers.SerializerMethodField("getHumanReadableName")
+ validators = serializers.SerializerMethodField("getValidators")
+ def getHumanReadableName(self, obj):\r
+ return str(obj)
+ def getValidators(self, obj):
+ try:
+ return obj.getValidators()
+ except:
+ return None
class Meta:
model = {{ object.camel }}
- fields = ({% for prop in object.props %}'{{ prop }}',{% endfor %}{% for ref in object.refs %}{%if ref.multi %}'{{ ref.plural }}'{% else %}'{{ ref }}'{% endif %},{% endfor %})
+ fields = ('humanReadableName', 'validators', {% for prop in object.props %}'{{ prop }}',{% endfor %}{% for ref in object.refs %}{%if ref.multi %}'{{ ref.plural }}'{% else %}'{{ ref }}'{% endif %},{% endfor %})
class {{ object.camel }}IdSerializer(serializers.ModelSerializer):
id = serializers.Field()
{{ ref }} = serializers.HyperlinkedRelatedField(read_only=True, view_name='{{ ref }}-detail')
{% endif %}
{% endfor %}
+ humanReadableName = serializers.SerializerMethodField("getHumanReadableName")
+ validators = serializers.SerializerMethodField("getValidators")
+ def getHumanReadableName(self, obj):\r
+ return str(obj)\r
+ def getValidators(self, obj):\r
+ try:
+ return obj.getValidators()
+ except:
+ return None\r
class Meta:
model = {{ object.camel }}
- fields = ({% for prop in object.props %}'{{ prop }}',{% endfor %}{% for ref in object.refs %}{%if ref.multi %}'{{ ref.plural }}'{% else %}'{{ ref }}'{% endif %},{% endfor %})
+ fields = ('humanReadableName', 'validators', {% for prop in object.props %}'{{ prop }}',{% endfor %}{% for ref in object.refs %}{%if ref.multi %}'{{ ref.plural }}'{% else %}'{{ ref }}'{% endif %},{% endfor %})
{% endfor %}
files=request.FILES, partial=partial)\r
\r
if not serializer.is_valid():\r
- print "UpdateModelMixin: not serializer.is_valid"\r
- print serializer.errors\r
- return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)\r
+ response = {"error": "validation",\r
+ "specific_error": "not serializer.is_valid()",\r
+ "reasons": serializer.errors}\r
+ return Response(response, status=status.HTTP_400_BAD_REQUEST)\r
\r
try:\r
self.pre_save(serializer.object)\r
except ValidationError as err:\r
# full_clean on model instance may be called in pre_save,\r
# so we have to handle eventual errors.\r
- return Response(err.message_dict, status=status.HTTP_400_BAD_REQUEST)\r
+ response = {"error": "validation",\r
+ "specific_error": "ValidationError in pre_save",\r
+ "reasons": err.message_dict}\r
+ return Response(response, status=status.HTTP_400_BAD_REQUEST)\r
\r
if serializer.object is not None:\r
if not serializer.object.can_update(request.user):\r
def create(self, request, *args, **kwargs):
serializer = self.get_serializer(data=request.DATA, files=request.FILES)
if not (serializer.is_valid()):
- raise Exception("failed serializer.is_valid: " + str(serializer.errors))
+ response = {"error": "validation",
+ "specific_error": "not serializer.is_valid()",\r
+ "reasons": serializer.errors}\r
+ return Response(response, status=status.HTTP_400_BAD_REQUEST)
obj = serializer.object
obj.caller = request.user
if obj.can_update(request.user):
# destroy() is handled by PlanetStackRetrieveUpdateDestroyAPIView
-"""
- XXX smbaker: my intent was to create a view that would return 'new' objects
- filled with defaults. I solved it another way, so this code may soon be
- abandoned.
-
-class {{ object.camel }}New(GenericAPIView):
- serializer_class = {{ object.camel }}Serializer
- id_serializer_class = {{ object.camel }}IdSerializer
-
- def get(self, request, *args, **kwargs):
- return self.makenew(request, *args, **kwargs)
-
- def get_serializer_class(self):
- no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False)
- if (no_hyperlinks):
- return self.id_serializer_class
- else:
- return self.serializer_class
-
- def makenew(self, request, *args, **kwargs):
- obj = {{ object.camel }}()
- serializer = self.get_serializer(obj)
- return Response(serializer.data)
-"""
-
{% endfor %}