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
7cdedc0f
Commit
7cdedc0f
authored
Oct 26, 2012
by
Tom Christie
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #321 from tomchristie/pastebin_tutorial
Tweaks and fixes in order to support the pastebin tutorial
parents
365d2065
67f1265e
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
22 additions
and
13 deletions
+22
-13
docs/api-guide/generic-views.md
+1
-1
rest_framework/fields.py
+0
-0
rest_framework/renderers.py
+7
-10
rest_framework/serializers.py
+10
-0
rest_framework/tests/models.py
+0
-0
rest_framework/tests/serializer.py
+4
-2
No files found.
docs/api-guide/generic-views.md
View file @
7cdedc0f
...
...
@@ -30,7 +30,7 @@ For more complex cases you might also want to override various methods on the vi
serializer_class = UserSerializer
permission_classes = (IsAdminUser,)
def get_paginate_by(self):
def get_paginate_by(self
, queryset
):
"""
Use smaller pagination for HTML representations.
"""
...
...
rest_framework/fields.py
View file @
7cdedc0f
rest_framework/renderers.py
View file @
7cdedc0f
...
...
@@ -224,7 +224,7 @@ class BrowsableAPIRenderer(BaseRenderer):
return
content
def
show_form_for_method
(
self
,
view
,
method
,
request
):
def
show_form_for_method
(
self
,
view
,
method
,
request
,
obj
):
"""
Returns True if a form should be shown for this method.
"""
...
...
@@ -236,7 +236,7 @@ class BrowsableAPIRenderer(BaseRenderer):
request
=
clone_request
(
request
,
method
)
try
:
if
not
view
.
has_permission
(
request
):
if
not
view
.
has_permission
(
request
,
obj
):
return
# Don't have permission
except
:
return
# Don't have permission and exception explicitly raise
...
...
@@ -295,7 +295,8 @@ class BrowsableAPIRenderer(BaseRenderer):
In the absence on of the Resource having an associated form then
provide a form that can be used to submit arbitrary content.
"""
if
not
self
.
show_form_for_method
(
view
,
method
,
request
):
obj
=
getattr
(
view
,
'object'
,
None
)
if
not
self
.
show_form_for_method
(
view
,
method
,
request
,
obj
):
return
if
method
==
'DELETE'
or
method
==
'OPTIONS'
:
...
...
@@ -305,17 +306,13 @@ class BrowsableAPIRenderer(BaseRenderer):
media_types
=
[
parser
.
media_type
for
parser
in
view
.
parser_classes
]
return
self
.
get_generic_content_form
(
media_types
)
# Creating an on the fly form see: http://stackoverflow.com/questions/3915024/dynamically-creating-classes-python
obj
,
data
=
None
,
None
if
getattr
(
view
,
'object'
,
None
):
obj
=
view
.
object
serializer
=
view
.
get_serializer
(
instance
=
obj
)
fields
=
self
.
serializer_to_form_fields
(
serializer
)
# Creating an on the fly form see:
# http://stackoverflow.com/questions/3915024/dynamically-creating-classes-python
OnTheFlyForm
=
type
(
"OnTheFlyForm"
,
(
forms
.
Form
,),
fields
)
if
obj
:
data
=
serializer
.
data
data
=
(
obj
is
not
None
)
and
serializer
.
data
or
None
form_instance
=
OnTheFlyForm
(
data
)
return
form_instance
...
...
rest_framework/serializers.py
View file @
7cdedc0f
...
...
@@ -3,6 +3,7 @@ import datetime
import
types
from
decimal
import
Decimal
from
django.db
import
models
from
django.forms
import
widgets
from
django.utils.datastructures
import
SortedDict
from
rest_framework.compat
import
get_concrete_model
from
rest_framework.fields
import
*
...
...
@@ -409,6 +410,15 @@ class ModelSerializer(Serializer):
kwargs
=
{}
if
model_field
.
has_default
():
kwargs
[
'required'
]
=
False
kwargs
[
'default'
]
=
model_field
.
get_default
()
if
model_field
.
__class__
==
models
.
TextField
:
kwargs
[
'widget'
]
=
widgets
.
Textarea
# TODO: TypedChoiceField?
if
model_field
.
flatchoices
:
# This ModelField contains choices
kwargs
[
'choices'
]
=
model_field
.
flatchoices
return
ChoiceField
(
**
kwargs
)
field_mapping
=
{
models
.
FloatField
:
FloatField
,
...
...
rest_framework/tests/models.py
View file @
7cdedc0f
rest_framework/tests/serializer.py
View file @
7cdedc0f
...
...
@@ -42,6 +42,7 @@ class ActionItemSerializer(serializers.ModelSerializer):
class
Meta
:
model
=
ActionItem
class
BasicTests
(
TestCase
):
def
setUp
(
self
):
self
.
comment
=
Comment
(
...
...
@@ -131,7 +132,7 @@ class ValidationTests(TestCase):
"""Make sure that a boolean value with a 'False' value is not
mistaken for not having a default."""
data
=
{
'title'
:
'Some action item'
,
'title'
:
'Some action item'
,
#No 'done' value.
}
serializer
=
ActionItemSerializer
(
data
,
instance
=
self
.
actionitem
)
...
...
@@ -296,10 +297,12 @@ class ManyToManyTests(TestCase):
self
.
assertEquals
(
instance
.
pk
,
2
)
self
.
assertEquals
(
list
(
instance
.
rel
.
all
()),
[])
class
ReadOnlyManyToManyTests
(
TestCase
):
def
setUp
(
self
):
class
ReadOnlyManyToManySerializer
(
serializers
.
ModelSerializer
):
rel
=
serializers
.
ManyRelatedField
(
readonly
=
True
)
class
Meta
:
model
=
ReadOnlyManyToManyModel
...
...
@@ -317,7 +320,6 @@ class ReadOnlyManyToManyTests(TestCase):
# A serialized representation of the model instance
self
.
data
=
{
'rel'
:
[
self
.
anchor
.
id
],
'id'
:
1
,
'text'
:
'anchor'
}
def
test_update
(
self
):
"""
Attempt to update an instance of a model with a ManyToMany
...
...
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