Fix kwargs in url conf to be more consistent, also fixes broken blog posts…

Fix kwargs in url conf to be more consistent, also fixes broken blog posts example (every blog post showed all comments)
parent 38c6a37a
from django.forms import ModelForm from django.forms import ModelForm
from django.db.models.query import QuerySet
from django.db.models import Model 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.response import Response, ResponseException
from djangorestframework.resource import Resource from djangorestframework.resource import Resource
...@@ -340,6 +341,13 @@ class ModelResource(Resource, ModelFormValidatorMixin): ...@@ -340,6 +341,13 @@ class ModelResource(Resource, ModelFormValidatorMixin):
def post(self, request, auth, content, *args, **kwargs): def post(self, request, auth, content, *args, **kwargs):
# TODO: test creation on a non-existing resource url # 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()) all_kw_args = dict(content.items() + kwargs.items())
if args: if args:
instance = self.model(pk=args[-1], **all_kw_args) instance = self.model(pk=args[-1], **all_kw_args)
...@@ -373,6 +381,7 @@ class ModelResource(Resource, ModelFormValidatorMixin): ...@@ -373,6 +381,7 @@ class ModelResource(Resource, ModelFormValidatorMixin):
else: else:
# Otherwise assume the kwargs uniquely identify the model # Otherwise assume the kwargs uniquely identify the model
instance = self.model.objects.get(**kwargs) instance = self.model.objects.get(**kwargs)
for (key, val) in content.items(): for (key, val) in content.items():
setattr(instance, key, val) setattr(instance, key, val)
except self.model.DoesNotExist: except self.model.DoesNotExist:
...@@ -404,7 +413,7 @@ class RootModelResource(ModelResource): ...@@ -404,7 +413,7 @@ class RootModelResource(ModelResource):
def get(self, request, auth, *args, **kwargs): def get(self, request, auth, *args, **kwargs):
queryset = self.queryset if self.queryset else self.model.objects.all() queryset = self.queryset if self.queryset else self.model.objects.all()
return queryset return queryset.filter(**kwargs)
class QueryModelResource(ModelResource): class QueryModelResource(ModelResource):
...@@ -418,5 +427,5 @@ class QueryModelResource(ModelResource): ...@@ -418,5 +427,5 @@ class QueryModelResource(ModelResource):
def get(self, request, auth, *args, **kwargs): def get(self, request, auth, *args, **kwargs):
queryset = self.queryset if self.queryset else self.model.objects.all() queryset = self.queryset if self.queryset else self.model.objects.all()
return queryset return queryset.filer(**kwargs)
...@@ -30,7 +30,7 @@ class BlogPost(models.Model): ...@@ -30,7 +30,7 @@ class BlogPost(models.Model):
@models.permalink @models.permalink
def comments_url(self): def comments_url(self):
"""Link to a resource which lists all comments for this blog post.""" """Link to a resource which lists all comments for this blog post."""
return ('comments', (), {'blogpost_id': self.key}) return ('comments', (), {'blogpost': self.key})
def __unicode__(self): def __unicode__(self):
return self.title return self.title
......
...@@ -4,6 +4,6 @@ from blogpost.views import BlogPosts, BlogPostInstance, Comments, CommentInstanc ...@@ -4,6 +4,6 @@ from blogpost.views import BlogPosts, BlogPostInstance, Comments, CommentInstanc
urlpatterns = patterns('', urlpatterns = patterns('',
url(r'^$', BlogPosts.as_view(), name='blog-posts'), url(r'^$', BlogPosts.as_view(), name='blog-posts'),
url(r'^(?P<key>[^/]+)/$', BlogPostInstance.as_view(), name='blog-post'), url(r'^(?P<key>[^/]+)/$', BlogPostInstance.as_view(), name='blog-post'),
url(r'^(?P<blogpost_id>[^/]+)/comments/$', Comments.as_view(), name='comments'), url(r'^(?P<blogpost>[^/]+)/comments/$', Comments.as_view(), name='comments'),
url(r'^(?P<blogpost>[^/]+)/comments/(?P<id>[^/]+)/$', CommentInstance.as_view(), name='comment'), url(r'^(?P<blogpost>[^/]+)/comments/(?P<id>[^/]+)/$', CommentInstance.as_view(), name='comment'),
) )
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment