aboutsummaryrefslogtreecommitdiffstats
path: root/djangorestframework/modelresource.py
diff options
context:
space:
mode:
authortom christie tom@tomchristie.com2011-02-19 17:55:32 +0000
committertom christie tom@tomchristie.com2011-02-19 17:55:32 +0000
commit67c48f758f3a3aa435e4f2ccf41764ae596447fb (patch)
treeee59df28bf6fe2a5bfcb84ce2a26ac7c0a9b9db5 /djangorestframework/modelresource.py
parent38c6a37af7cd006b05a08318aa34f6aacf03b4aa (diff)
downloaddjango-rest-framework-67c48f758f3a3aa435e4f2ccf41764ae596447fb.tar.bz2
Fix kwargs in url conf to be more consistent, also fixes broken blog posts example (every blog post showed all comments)
Diffstat (limited to 'djangorestframework/modelresource.py')
-rw-r--r--djangorestframework/modelresource.py15
1 files changed, 12 insertions, 3 deletions
diff --git a/djangorestframework/modelresource.py b/djangorestframework/modelresource.py
index 0123e77a..0b06dacb 100644
--- a/djangorestframework/modelresource.py
+++ b/djangorestframework/modelresource.py
@@ -1,6 +1,7 @@
from django.forms import ModelForm
-from django.db.models.query import QuerySet
from django.db.models import Model
+from django.db.models.query import QuerySet
+from django.db.models.fields.related import RelatedField
from djangorestframework.response import Response, ResponseException
from djangorestframework.resource import Resource
@@ -340,6 +341,13 @@ class ModelResource(Resource, ModelFormValidatorMixin):
def post(self, request, auth, content, *args, **kwargs):
# TODO: test creation on a non-existing resource url
+
+ # translated related_field into related_field_id
+ for related_name in [field.name for field in self.model._meta.fields if isinstance(field, RelatedField)]:
+ if kwargs.has_key(related_name):
+ kwargs[related_name + '_id'] = kwargs[related_name]
+ del kwargs[related_name]
+
all_kw_args = dict(content.items() + kwargs.items())
if args:
instance = self.model(pk=args[-1], **all_kw_args)
@@ -373,6 +381,7 @@ class ModelResource(Resource, ModelFormValidatorMixin):
else:
# Otherwise assume the kwargs uniquely identify the model
instance = self.model.objects.get(**kwargs)
+
for (key, val) in content.items():
setattr(instance, key, val)
except self.model.DoesNotExist:
@@ -404,7 +413,7 @@ class RootModelResource(ModelResource):
def get(self, request, auth, *args, **kwargs):
queryset = self.queryset if self.queryset else self.model.objects.all()
- return queryset
+ return queryset.filter(**kwargs)
class QueryModelResource(ModelResource):
@@ -418,5 +427,5 @@ class QueryModelResource(ModelResource):
def get(self, request, auth, *args, **kwargs):
queryset = self.queryset if self.queryset else self.model.objects.all()
- return queryset
+ return queryset.filer(**kwargs)