Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
D
django-rest-framework
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
edx
django-rest-framework
Commits
02c1b598
Commit
02c1b598
authored
Nov 11, 2012
by
Marko Tibold
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #396 from markotibold/#380
Fixes #380
parents
f9a9ff1d
2a2ce406
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
40 additions
and
3 deletions
+40
-3
rest_framework/fields.py
+4
-1
rest_framework/tests/hyperlinkedserializers.py
+31
-2
rest_framework/tests/models.py
+5
-0
No files found.
rest_framework/fields.py
View file @
02c1b598
...
@@ -522,7 +522,10 @@ class HyperlinkedRelatedField(RelatedField):
...
@@ -522,7 +522,10 @@ class HyperlinkedRelatedField(RelatedField):
view_name
=
self
.
view_name
view_name
=
self
.
view_name
request
=
self
.
context
.
get
(
'request'
,
None
)
request
=
self
.
context
.
get
(
'request'
,
None
)
format
=
self
.
format
or
self
.
context
.
get
(
'format'
,
None
)
format
=
self
.
format
or
self
.
context
.
get
(
'format'
,
None
)
kwargs
=
{
self
.
pk_url_kwarg
:
obj
.
pk
}
pk
=
getattr
(
obj
,
'pk'
,
None
)
if
pk
is
None
:
return
kwargs
=
{
self
.
pk_url_kwarg
:
pk
}
try
:
try
:
return
reverse
(
view_name
,
kwargs
=
kwargs
,
request
=
request
,
format
=
format
)
return
reverse
(
view_name
,
kwargs
=
kwargs
,
request
=
request
,
format
=
format
)
except
:
except
:
...
...
rest_framework/tests/hyperlinkedserializers.py
View file @
02c1b598
...
@@ -2,7 +2,7 @@ from django.conf.urls.defaults import patterns, url
...
@@ -2,7 +2,7 @@ from django.conf.urls.defaults import patterns, url
from
django.test
import
TestCase
from
django.test
import
TestCase
from
django.test.client
import
RequestFactory
from
django.test.client
import
RequestFactory
from
rest_framework
import
generics
,
status
,
serializers
from
rest_framework
import
generics
,
status
,
serializers
from
rest_framework.tests.models
import
Anchor
,
BasicModel
,
ManyToManyModel
,
BlogPost
,
BlogPostComment
,
Album
,
Photo
from
rest_framework.tests.models
import
Anchor
,
BasicModel
,
ManyToManyModel
,
BlogPost
,
BlogPostComment
,
Album
,
Photo
,
OptionalRelationModel
factory
=
RequestFactory
()
factory
=
RequestFactory
()
...
@@ -67,6 +67,11 @@ class AlbumDetail(generics.RetrieveAPIView):
...
@@ -67,6 +67,11 @@ class AlbumDetail(generics.RetrieveAPIView):
model
=
Album
model
=
Album
class
OptionalRelationDetail
(
generics
.
RetrieveAPIView
):
model
=
OptionalRelationModel
model_serializer_class
=
serializers
.
HyperlinkedModelSerializer
urlpatterns
=
patterns
(
''
,
urlpatterns
=
patterns
(
''
,
url
(
r'^basic/$'
,
BasicList
.
as_view
(),
name
=
'basicmodel-list'
),
url
(
r'^basic/$'
,
BasicList
.
as_view
(),
name
=
'basicmodel-list'
),
url
(
r'^basic/(?P<pk>\d+)/$'
,
BasicDetail
.
as_view
(),
name
=
'basicmodel-detail'
),
url
(
r'^basic/(?P<pk>\d+)/$'
,
BasicDetail
.
as_view
(),
name
=
'basicmodel-detail'
),
...
@@ -76,7 +81,8 @@ urlpatterns = patterns('',
...
@@ -76,7 +81,8 @@ urlpatterns = patterns('',
url
(
r'^posts/(?P<pk>\d+)/$'
,
BlogPostDetail
.
as_view
(),
name
=
'blogpost-detail'
),
url
(
r'^posts/(?P<pk>\d+)/$'
,
BlogPostDetail
.
as_view
(),
name
=
'blogpost-detail'
),
url
(
r'^comments/$'
,
BlogPostCommentListCreate
.
as_view
(),
name
=
'blogpostcomment-list'
),
url
(
r'^comments/$'
,
BlogPostCommentListCreate
.
as_view
(),
name
=
'blogpostcomment-list'
),
url
(
r'^albums/(?P<title>\w[\w-]*)/$'
,
AlbumDetail
.
as_view
(),
name
=
'album-detail'
),
url
(
r'^albums/(?P<title>\w[\w-]*)/$'
,
AlbumDetail
.
as_view
(),
name
=
'album-detail'
),
url
(
r'^photos/$'
,
PhotoListCreate
.
as_view
(),
name
=
'photo-list'
)
url
(
r'^photos/$'
,
PhotoListCreate
.
as_view
(),
name
=
'photo-list'
),
url
(
r'^optionalrelation/(?P<pk>\d+)/$'
,
OptionalRelationDetail
.
as_view
(),
name
=
'optionalrelationmodel-detail'
),
)
)
...
@@ -211,3 +217,26 @@ class TestCreateWithForeignKeysAndCustomSlug(TestCase):
...
@@ -211,3 +217,26 @@ class TestCreateWithForeignKeysAndCustomSlug(TestCase):
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_201_CREATED
)
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_201_CREATED
)
self
.
assertEqual
(
self
.
post
.
photo_set
.
count
(),
1
)
self
.
assertEqual
(
self
.
post
.
photo_set
.
count
(),
1
)
self
.
assertEqual
(
self
.
post
.
photo_set
.
all
()[
0
]
.
description
,
'A test photo'
)
self
.
assertEqual
(
self
.
post
.
photo_set
.
all
()[
0
]
.
description
,
'A test photo'
)
class
TestOptionalRelationHyperlinkedView
(
TestCase
):
urls
=
'rest_framework.tests.hyperlinkedserializers'
def
setUp
(
self
):
"""
Create 1 OptionalRelationModel intances.
"""
OptionalRelationModel
()
.
save
()
self
.
objects
=
OptionalRelationModel
.
objects
self
.
detail_view
=
OptionalRelationDetail
.
as_view
()
self
.
data
=
{
"url"
:
"http://testserver/optionalrelation/1/"
,
"other"
:
None
}
def
test_get_detail_view
(
self
):
"""
GET requests to RetrieveAPIView with optional relations should return None
for non existing relations.
"""
request
=
factory
.
get
(
'/optionalrelationmodel-detail/1'
)
response
=
self
.
detail_view
(
request
,
pk
=
1
)
.
render
()
self
.
assertEquals
(
response
.
status_code
,
status
.
HTTP_200_OK
)
self
.
assertEquals
(
response
.
data
,
self
.
data
)
rest_framework/tests/models.py
View file @
02c1b598
...
@@ -149,3 +149,8 @@ class Person(RESTFrameworkModel):
...
@@ -149,3 +149,8 @@ class Person(RESTFrameworkModel):
# Model for issue #324
# Model for issue #324
class
BlankFieldModel
(
RESTFrameworkModel
):
class
BlankFieldModel
(
RESTFrameworkModel
):
title
=
models
.
CharField
(
max_length
=
100
,
blank
=
True
)
title
=
models
.
CharField
(
max_length
=
100
,
blank
=
True
)
# Model for issue #380
class
OptionalRelationModel
(
RESTFrameworkModel
):
other
=
models
.
ForeignKey
(
'OptionalRelationModel'
,
blank
=
True
,
null
=
True
)
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment