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
cdc3c374
Commit
cdc3c374
authored
May 21, 2013
by
Tom Christie
Browse files
Options
Browse Files
Download
Plain Diff
Merge and styling fixes
parents
f77ae156
99848b03
Show whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
116 additions
and
10 deletions
+116
-10
rest_framework/fields.py
+10
-3
rest_framework/renderers.py
+5
-1
rest_framework/serializers.py
+6
-0
rest_framework/static/rest_framework/css/bootstrap-tweaks.css
+4
-0
rest_framework/templates/rest_framework/form.html
+1
-1
rest_framework/tests/models.py
+9
-1
rest_framework/tests/response.py
+53
-1
rest_framework/tests/serializer.py
+28
-3
No files found.
rest_framework/fields.py
View file @
cdc3c374
...
...
@@ -109,7 +109,7 @@ class Field(object):
use_files
=
False
form_field_class
=
forms
.
CharField
def
__init__
(
self
,
source
=
None
):
def
__init__
(
self
,
source
=
None
,
label
=
None
,
help_text
=
None
):
self
.
parent
=
None
self
.
creation_counter
=
Field
.
creation_counter
...
...
@@ -117,6 +117,12 @@ class Field(object):
self
.
source
=
source
if
label
is
not
None
:
self
.
label
=
smart_text
(
label
)
if
help_text
is
not
None
:
self
.
help_text
=
smart_text
(
help_text
)
def
initialize
(
self
,
parent
,
field_name
):
"""
Called to set up a field prior to field_to_native or field_from_native.
...
...
@@ -200,7 +206,8 @@ class WritableField(Field):
widget
=
widgets
.
TextInput
default
=
None
def
__init__
(
self
,
source
=
None
,
read_only
=
False
,
required
=
None
,
def
__init__
(
self
,
source
=
None
,
label
=
None
,
help_text
=
None
,
read_only
=
False
,
required
=
None
,
validators
=
[],
error_messages
=
None
,
widget
=
None
,
default
=
None
,
blank
=
None
):
...
...
@@ -211,7 +218,7 @@ class WritableField(Field):
DeprecationWarning
,
stacklevel
=
2
)
required
=
not
(
blank
)
super
(
WritableField
,
self
)
.
__init__
(
source
=
source
)
super
(
WritableField
,
self
)
.
__init__
(
source
=
source
,
label
=
label
,
help_text
=
help_text
)
self
.
read_only
=
read_only
if
required
is
None
:
...
...
rest_framework/renderers.py
View file @
cdc3c374
...
...
@@ -385,7 +385,11 @@ class BrowsableAPIRenderer(BaseRenderer):
if
getattr
(
v
,
'default'
,
None
)
is
not
None
:
kwargs
[
'initial'
]
=
v
.
default
kwargs
[
'label'
]
=
k
if
getattr
(
v
,
'label'
,
None
)
is
not
None
:
kwargs
[
'label'
]
=
v
.
label
if
getattr
(
v
,
'help_text'
,
None
)
is
not
None
:
kwargs
[
'help_text'
]
=
v
.
help_text
fields
[
k
]
=
v
.
form_field_class
(
**
kwargs
)
...
...
rest_framework/serializers.py
View file @
cdc3c374
...
...
@@ -739,6 +739,12 @@ class ModelSerializer(Serializer):
if
issubclass
(
model_field
.
__class__
,
models
.
TextField
):
kwargs
[
'widget'
]
=
widgets
.
Textarea
if
model_field
.
verbose_name
is
not
None
:
kwargs
[
'label'
]
=
model_field
.
verbose_name
if
model_field
.
help_text
is
not
None
:
kwargs
[
'help_text'
]
=
model_field
.
help_text
# TODO: TypedChoiceField?
if
model_field
.
flatchoices
:
# This ModelField contains choices
kwargs
[
'choices'
]
=
model_field
.
flatchoices
...
...
rest_framework/static/rest_framework/css/bootstrap-tweaks.css
View file @
cdc3c374
...
...
@@ -104,6 +104,10 @@ html, body {
margin-bottom
:
0
;
}
.well
form
.help-block
{
color
:
#999
;
}
.nav-tabs
{
border
:
0
;
}
...
...
rest_framework/templates/rest_framework/form.html
View file @
cdc3c374
...
...
@@ -6,7 +6,7 @@
{{ field.label_tag|add_class:"control-label" }}
<div
class=
"controls"
>
{{ field }}
<span
class=
"help-
inline
"
>
{{ field.help_text }}
</span>
<span
class=
"help-
block
"
>
{{ field.help_text }}
</span>
<!--{{ field.errors|add_class:"help-block" }}-->
</div>
</div>
...
...
rest_framework/tests/models.py
View file @
cdc3c374
from
__future__
import
unicode_literals
from
django.db
import
models
from
django.utils.translation
import
ugettext_lazy
as
_
from
rest_framework
import
serializers
def
foobar
():
...
...
@@ -32,7 +34,7 @@ class Anchor(RESTFrameworkModel):
class
BasicModel
(
RESTFrameworkModel
):
text
=
models
.
CharField
(
max_length
=
100
)
text
=
models
.
CharField
(
max_length
=
100
,
verbose_name
=
_
(
"Text comes here"
),
help_text
=
_
(
"Text description."
)
)
class
SlugBasedModel
(
RESTFrameworkModel
):
...
...
@@ -159,3 +161,9 @@ class NullableOneToOneSource(RESTFrameworkModel):
name
=
models
.
CharField
(
max_length
=
100
)
target
=
models
.
OneToOneField
(
OneToOneTarget
,
null
=
True
,
blank
=
True
,
related_name
=
'nullable_source'
)
# Serializer used to test BasicModel
class
BasicModelSerializer
(
serializers
.
ModelSerializer
):
class
Meta
:
model
=
BasicModel
rest_framework/tests/response.py
View file @
cdc3c374
from
__future__
import
unicode_literals
from
django.test
import
TestCase
from
rest_framework.tests.models
import
BasicModel
,
BasicModelSerializer
from
rest_framework.compat
import
patterns
,
url
,
include
from
rest_framework.response
import
Response
from
rest_framework.views
import
APIView
from
rest_framework
import
generics
from
rest_framework
import
routers
from
rest_framework
import
status
from
rest_framework.renderers
import
(
BaseRenderer
,
JSONRenderer
,
BrowsableAPIRenderer
)
from
rest_framework
import
viewsets
from
rest_framework.settings
import
api_settings
from
rest_framework.compat
import
six
...
...
@@ -80,12 +84,30 @@ class HTMLView1(APIView):
def
get
(
self
,
request
,
**
kwargs
):
return
Response
(
'text'
)
class
HTMLNewModelViewSet
(
viewsets
.
ModelViewSet
):
model
=
BasicModel
class
HTMLNewModelView
(
generics
.
ListCreateAPIView
):
renderer_classes
=
(
BrowsableAPIRenderer
,)
permission_classes
=
[]
serializer_class
=
BasicModelSerializer
model
=
BasicModel
new_model_viewset_router
=
routers
.
DefaultRouter
()
new_model_viewset_router
.
register
(
r''
,
HTMLNewModelViewSet
)
urlpatterns
=
patterns
(
''
,
url
(
r'^setbyview$'
,
MockViewSettingContentType
.
as_view
(
renderer_classes
=
[
RendererA
,
RendererB
,
RendererC
])),
url
(
r'^.*\.(?P<format>.+)$'
,
MockView
.
as_view
(
renderer_classes
=
[
RendererA
,
RendererB
,
RendererC
])),
url
(
r'^$'
,
MockView
.
as_view
(
renderer_classes
=
[
RendererA
,
RendererB
,
RendererC
])),
url
(
r'^html$'
,
HTMLView
.
as_view
()),
url
(
r'^html1$'
,
HTMLView1
.
as_view
()),
url
(
r'^html_new_model$'
,
HTMLNewModelView
.
as_view
()),
url
(
r'^html_new_model_viewset'
,
include
(
new_model_viewset_router
.
urls
)),
url
(
r'^restframework'
,
include
(
'rest_framework.urls'
,
namespace
=
'rest_framework'
))
)
...
...
@@ -191,7 +213,21 @@ class Issue122Tests(TestCase):
self
.
client
.
get
(
'/html1'
)
class
Issue807Testts
(
TestCase
):
class
Issue467Tests
(
TestCase
):
"""
Tests for #467
"""
urls
=
'rest_framework.tests.response'
def
test_form_has_label_and_help_text
(
self
):
resp
=
self
.
client
.
get
(
'/html_new_model'
)
self
.
assertEqual
(
resp
[
'Content-Type'
],
'text/html; charset=utf-8'
)
self
.
assertContains
(
resp
,
'Text comes here'
)
self
.
assertContains
(
resp
,
'Text description.'
)
class
Issue807Tests
(
TestCase
):
"""
Covers #807
"""
...
...
@@ -224,3 +260,19 @@ class Issue807Testts(TestCase):
headers
=
{
"HTTP_ACCEPT"
:
RendererC
.
media_type
}
resp
=
self
.
client
.
get
(
'/setbyview'
,
**
headers
)
self
.
assertEqual
(
'setbyview'
,
resp
[
'Content-Type'
])
def
test_viewset_label_help_text
(
self
):
param
=
'?
%
s=
%
s'
%
(
api_settings
.
URL_ACCEPT_OVERRIDE
,
'text/html'
)
resp
=
self
.
client
.
get
(
'/html_new_model_viewset/'
+
param
)
self
.
assertEqual
(
resp
[
'Content-Type'
],
'text/html; charset=utf-8'
)
self
.
assertContains
(
resp
,
'Text comes here'
)
self
.
assertContains
(
resp
,
'Text description.'
)
def
test_form_has_label_and_help_text
(
self
):
resp
=
self
.
client
.
get
(
'/html_new_model'
)
self
.
assertEqual
(
resp
[
'Content-Type'
],
'text/html; charset=utf-8'
)
self
.
assertContains
(
resp
,
'Text comes here'
)
self
.
assertContains
(
resp
,
'Text description.'
)
rest_framework/tests/serializer.py
View file @
cdc3c374
...
...
@@ -4,10 +4,11 @@ from django.db.models.fields import BLANK_CHOICE_DASH
from
django.test
import
TestCase
from
django.utils.datastructures
import
MultiValueDict
from
django.utils.translation
import
ugettext_lazy
as
_
from
rest_framework
import
serializers
from
rest_framework
import
serializers
,
fields
,
relations
from
rest_framework.tests.models
import
(
HasPositiveIntegerAsChoice
,
Album
,
ActionItem
,
Anchor
,
BasicModel
,
BlankFieldModel
,
BlogPost
,
BlogPostComment
,
Book
,
CallableDefaultValueModel
,
DefaultValueModel
,
ManyToManyModel
,
Person
,
ReadOnlyManyToManyModel
,
Photo
,
RESTFrameworkModel
)
from
rest_framework.tests.models
import
BasicModelSerializer
import
datetime
import
pickle
...
...
@@ -1324,8 +1325,7 @@ class DeserializeListTestCase(TestCase):
self
.
assertEqual
(
serializer
.
errors
,
expected
)
# test for issue 747
# Test for issue 747
class
LazyStringModel
(
object
):
def
__init__
(
self
,
lazystring
):
...
...
@@ -1352,6 +1352,31 @@ class LazyStringsTestCase(TestCase):
type
(
'lazystring'
))
# Test for issue #467
class
FieldLabelTest
(
TestCase
):
def
setUp
(
self
):
self
.
serializer_class
=
BasicModelSerializer
def
test_label_from_model
(
self
):
"""
Validates that label and help_text are correctly copied from the model class.
"""
serializer
=
self
.
serializer_class
()
text_field
=
serializer
.
fields
[
'text'
]
self
.
assertEquals
(
'Text comes here'
,
text_field
.
label
)
self
.
assertEquals
(
'Text description.'
,
text_field
.
help_text
)
def
test_field_ctor
(
self
):
"""
This is check that ctor supports both label and help_text.
"""
self
.
assertEquals
(
'Label'
,
fields
.
Field
(
label
=
'Label'
,
help_text
=
'Help'
)
.
label
)
self
.
assertEquals
(
'Help'
,
fields
.
CharField
(
label
=
'Label'
,
help_text
=
'Help'
)
.
help_text
)
self
.
assertEquals
(
'Label'
,
relations
.
HyperlinkedRelatedField
(
view_name
=
'fake'
,
label
=
'Label'
,
help_text
=
'Help'
,
many
=
True
)
.
label
)
class
AttributeMappingOnAutogeneratedFieldsTests
(
TestCase
):
def
setUp
(
self
):
...
...
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