From 7231653915ede81fcb0570b7c5455a12563ca1c0 Mon Sep 17 00:00:00 2001 From: Henry Clifford Date: Fri, 4 Oct 2013 10:18:48 -0400 Subject: [PATCH 1/2] support args on get_object_or_404 --- rest_framework/generics.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rest_framework/generics.py b/rest_framework/generics.py index 80efad013..5e901d4b2 100644 --- a/rest_framework/generics.py +++ b/rest_framework/generics.py @@ -14,13 +14,13 @@ from rest_framework.settings import api_settings import warnings -def get_object_or_404(queryset, **filter_kwargs): +def get_object_or_404(queryset, *filter_args, **filter_kwargs): """ Same as Django's standard shortcut, but make sure to raise 404 if the filter_kwargs don't match the required types. """ try: - return _get_object_or_404(queryset, **filter_kwargs) + return _get_object_or_404(queryset, *filter_args, **filter_kwargs) except (TypeError, ValueError): raise Http404 From 20b784bab45e0d1bf3e4a06a675d2359cf411aea Mon Sep 17 00:00:00 2001 From: Henry Clifford Date: Wed, 5 Jun 2013 17:26:46 -0400 Subject: [PATCH 2/2] Add property_fields for marking fields as model properties --- rest_framework/serializers.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/rest_framework/serializers.py b/rest_framework/serializers.py index 8d2e0feb8..fb366594f 100644 --- a/rest_framework/serializers.py +++ b/rest_framework/serializers.py @@ -555,6 +555,7 @@ class ModelSerializerOptions(SerializerOptions): super(ModelSerializerOptions, self).__init__(meta) self.model = getattr(meta, 'model', None) self.read_only_fields = getattr(meta, 'read_only_fields', ()) + self.property_fields = getattr(meta, 'property_fields', ()) class ModelSerializer(Serializer): @@ -702,6 +703,10 @@ class ModelSerializer(Serializer): (field_name, self.__class__.__name__) ret[field_name].read_only = True + # For each of the `property_fields` construct a field + for property_name in self.opts.property_fields: + ret[property_name] = self.get_property_field(property_name) + return ret def get_pk_field(self, model_field): @@ -742,6 +747,9 @@ class ModelSerializer(Serializer): return PrimaryKeyRelatedField(**kwargs) + def get_property_field(self, model_property): + return CharField(read_only=True, source=model_property) + def get_field(self, model_field): """ Creates a default instance of a basic non-relational field.