mirror of
https://github.com/encode/django-rest-framework.git
synced 2025-02-16 19:41:06 +03:00
Fix kwargs in url conf to be more consistent, also fixes broken blog posts example (every blog post showed all comments)
This commit is contained in:
parent
38c6a37af7
commit
67c48f758f
|
@ -1,6 +1,7 @@
|
||||||
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):
|
||||||
|
|
||||||
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):
|
||||||
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):
|
||||||
|
|
||||||
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):
|
||||||
|
|
||||||
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):
|
||||||
@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
|
||||||
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'),
|
||||||
)
|
)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user