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
e4067bfb
Commit
e4067bfb
authored
May 02, 2013
by
Tom Christie
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
introduce lookup_field and add pendingdeprecationwarnings
parent
ddbbe784
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
21 additions
and
2 deletions
+21
-2
rest_framework/mixins.py
+11
-2
rest_framework/relations.py
+10
-0
No files found.
rest_framework/mixins.py
View file @
e4067bfb
...
@@ -12,7 +12,7 @@ from rest_framework.response import Response
...
@@ -12,7 +12,7 @@ from rest_framework.response import Response
from
rest_framework.request
import
clone_request
from
rest_framework.request
import
clone_request
def
_get_validation_exclusions
(
obj
,
pk
=
None
,
slug_field
=
None
):
def
_get_validation_exclusions
(
obj
,
pk
=
None
,
slug_field
=
None
,
lookup_field
=
None
):
"""
"""
Given a model instance, and an optional pk and slug field,
Given a model instance, and an optional pk and slug field,
return the full list of all other field names on that model.
return the full list of all other field names on that model.
...
@@ -23,14 +23,19 @@ def _get_validation_exclusions(obj, pk=None, slug_field=None):
...
@@ -23,14 +23,19 @@ def _get_validation_exclusions(obj, pk=None, slug_field=None):
include
=
[]
include
=
[]
if
pk
:
if
pk
:
# Pending deprecation
pk_field
=
obj
.
_meta
.
pk
pk_field
=
obj
.
_meta
.
pk
while
pk_field
.
rel
:
while
pk_field
.
rel
:
pk_field
=
pk_field
.
rel
.
to
.
_meta
.
pk
pk_field
=
pk_field
.
rel
.
to
.
_meta
.
pk
include
.
append
(
pk_field
.
name
)
include
.
append
(
pk_field
.
name
)
if
slug_field
:
if
slug_field
:
# Pending deprecation
include
.
append
(
slug_field
)
include
.
append
(
slug_field
)
if
lookup_field
and
lookup_field
!=
'pk'
:
include
.
append
(
lookup_field
)
return
[
field
.
name
for
field
in
obj
.
_meta
.
fields
if
field
.
name
not
in
include
]
return
[
field
.
name
for
field
in
obj
.
_meta
.
fields
if
field
.
name
not
in
include
]
...
@@ -139,10 +144,14 @@ class UpdateModelMixin(object):
...
@@ -139,10 +144,14 @@ class UpdateModelMixin(object):
Set any attributes on the object that are implicit in the request.
Set any attributes on the object that are implicit in the request.
"""
"""
# pk and/or slug attributes are implicit in the URL.
# pk and/or slug attributes are implicit in the URL.
lookup
=
self
.
kwargs
.
get
(
self
.
lookup_field
,
None
)
pk
=
self
.
kwargs
.
get
(
self
.
pk_url_kwarg
,
None
)
pk
=
self
.
kwargs
.
get
(
self
.
pk_url_kwarg
,
None
)
slug
=
self
.
kwargs
.
get
(
self
.
slug_url_kwarg
,
None
)
slug
=
self
.
kwargs
.
get
(
self
.
slug_url_kwarg
,
None
)
slug_field
=
slug
and
self
.
slug_field
or
None
slug_field
=
slug
and
self
.
slug_field
or
None
if
lookup
:
setattr
(
obj
,
self
.
lookup_field
,
lookup
)
if
pk
:
if
pk
:
setattr
(
obj
,
'pk'
,
pk
)
setattr
(
obj
,
'pk'
,
pk
)
...
@@ -152,7 +161,7 @@ class UpdateModelMixin(object):
...
@@ -152,7 +161,7 @@ class UpdateModelMixin(object):
# Ensure we clean the attributes so that we don't eg return integer
# Ensure we clean the attributes so that we don't eg return integer
# pk using a string representation, as provided by the url conf kwarg.
# pk using a string representation, as provided by the url conf kwarg.
if
hasattr
(
obj
,
'full_clean'
):
if
hasattr
(
obj
,
'full_clean'
):
exclude
=
_get_validation_exclusions
(
obj
,
pk
,
slug_field
)
exclude
=
_get_validation_exclusions
(
obj
,
pk
,
slug_field
,
self
.
lookup_field
)
obj
.
full_clean
(
exclude
)
obj
.
full_clean
(
exclude
)
...
...
rest_framework/relations.py
View file @
e4067bfb
...
@@ -314,6 +314,16 @@ class HyperlinkedRelatedField(RelatedField):
...
@@ -314,6 +314,16 @@ class HyperlinkedRelatedField(RelatedField):
self
.
format
=
kwargs
.
pop
(
'format'
,
None
)
self
.
format
=
kwargs
.
pop
(
'format'
,
None
)
# These are pending deprecation
# These are pending deprecation
if
'pk_url_kwarg'
in
kwargs
:
msg
=
'pk_url_kwarg is pending deprecation. Use lookup_field instead.'
warnings
.
warn
(
msg
,
PendingDeprecationWarning
,
stacklevel
=
2
)
if
'slug_url_kwarg'
in
kwargs
:
msg
=
'slug_url_kwarg is pending deprecation. Use lookup_field instead.'
warnings
.
warn
(
msg
,
PendingDeprecationWarning
,
stacklevel
=
2
)
if
'slug_field'
in
kwargs
:
msg
=
'slug_field is pending deprecation. Use lookup_field instead.'
warnings
.
warn
(
msg
,
PendingDeprecationWarning
,
stacklevel
=
2
)
self
.
pk_url_kwarg
=
kwargs
.
pop
(
'pk_url_kwarg'
,
self
.
pk_url_kwarg
)
self
.
pk_url_kwarg
=
kwargs
.
pop
(
'pk_url_kwarg'
,
self
.
pk_url_kwarg
)
self
.
slug_field
=
kwargs
.
pop
(
'slug_field'
,
self
.
slug_field
)
self
.
slug_field
=
kwargs
.
pop
(
'slug_field'
,
self
.
slug_field
)
default_slug_kwarg
=
self
.
slug_url_kwarg
or
self
.
slug_field
default_slug_kwarg
=
self
.
slug_url_kwarg
or
self
.
slug_field
...
...
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