Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
d036de0
(Not tested yet)
Dec 22, 2015
c6401a9
Preparing merge with upstream/master
Jan 3, 2016
deb9446
Add app_name in urls + tests
Jan 4, 2016
e2744a0
- Show the "Jump to" dropdown only if there is more than 1 value
Jan 5, 2016
b774268
Add '-' to the url patten
Jan 5, 2016
e866a41
Use the endpoint's namespace into the group url
Jan 5, 2016
2a56a35
Manage nested serializer and list fields/serializers in Endpoint fields
Jan 20, 2016
34f9683
correction of recursive call
Jan 20, 2016
5a43d41
Recursive include is now called with "only"
Jan 20, 2016
85ba4d2
Manage allowed_methods on ModelViewSets
Jan 21, 2016
a621943
Sort allowed_methods
Jan 22, 2016
8c12fdd
Merge remote-tracking branch 'upstream/master'
Jan 26, 2016
8dab8d9
Add line breaks on docstrings
Feb 19, 2016
52cf5ce
Merge from upstream/master
Feb 19, 2016
be8f4ce
Merge remote-tracking branch 'upstream/master'
Feb 29, 2016
4d2a370
Nested/List serializers + login_required
Feb 29, 2016
a97f94a
Re-enabling jumbotron block without content (too much space lost)
Feb 29, 2016
fa5871a
Merge branch 'master' into master
debnet Mar 8, 2016
3441d6f
Fix a TypeError fetching the allowed_methods when the ModelViewSet has
msaelices Mar 15, 2016
eedcae5
Merge pull request #1 from msaelices/master
debnet Mar 15, 2016
c6bbf50
Fixing flake8 issues after PR #1
Mar 16, 2016
0fd3c1d
Merge remote-tracking branch 'upstream/master'
Mar 25, 2016
1b5b1c2
Merge branch 'master' into master
debnet Mar 27, 2016
27e5d8e
Merge branch 'master' into master
debnet Mar 31, 2016
9a677dc
Merge remote-tracking branch 'upstream/master'
Jun 2, 2016
d08e25b
Merge upstream/master 0.0.10
Jun 2, 2016
fc9179f
Merge remote-tracking branch 'upstream/master'
Jul 29, 2016
550b372
Merge from upstream + allow list of drf_routers
Aug 1, 2016
15dead2
Fix flake8
Aug 1, 2016
33b41df
Update to Django 1.10
Sep 5, 2016
f36f8a1
Merge branch 'master' into master
debnet Sep 7, 2016
e5a8bef
Fix Django 2
Apr 12, 2018
ada797d
Fix _get_allowed_methods
Oct 11, 2018
File filter

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Manage nested serializer and list fields/serializers in Endpoint fields
  • Loading branch information
Maxence committed Jan 20, 2016
commit 2a56a35e9620f60fb6c631752581feeb8cc27c1d
10 changes: 10 additions & 0 deletions demo/project/accounts/serializers.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
from rest_framework import serializers
from project.accounts.models import User
from rest_framework.authtoken.serializers import AuthTokenSerializer


class UserRegistrationSerializer(serializers.ModelSerializer):
Expand Down Expand Up @@ -30,3 +31,12 @@ class Meta:
model = User
fields = ('id', 'token', 'password',)
extra_kwargs = {'password': {'write_only': True}}


class NestedSerializer(serializers.Serializer):
nb_test = serializers.IntegerField(default=0, required=False)
liste_codes = serializers.ListField(child=serializers.CharField())


class CustomAuthTokenSerializer(AuthTokenSerializer):
nested = NestedSerializer(many=True)
5 changes: 2 additions & 3 deletions demo/project/accounts/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,12 @@
from django.views.generic.base import TemplateView
from rest_framework import parsers, renderers, generics, status
from rest_framework.authtoken.models import Token
from rest_framework.authtoken.serializers import AuthTokenSerializer
from rest_framework.permissions import AllowAny
from rest_framework.response import Response
from rest_framework.views import APIView
from project.accounts.models import User
from project.accounts.serializers import (
UserRegistrationSerializer, UserProfileSerializer, ResetPasswordSerializer
UserRegistrationSerializer, UserProfileSerializer, ResetPasswordSerializer, CustomAuthTokenSerializer
)


Expand All @@ -28,7 +27,7 @@ class LoginView(APIView):
permission_classes = ()
parser_classes = (parsers.FormParser, parsers.MultiPartParser, parsers.JSONParser,)
renderer_classes = (renderers.JSONRenderer,)
serializer_class = AuthTokenSerializer
serializer_class = CustomAuthTokenSerializer

def post(self, request):
serializer = self.serializer_class(data=request.data)
Expand Down
25 changes: 20 additions & 5 deletions rest_framework_docs/api_endpoint.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import json
import inspect
from django.contrib.admindocs.views import simplify_regex
from rest_framework import serializers
from rest_framework.viewsets import ModelViewSet


Expand Down Expand Up @@ -50,11 +51,7 @@ def __get_serializer_fields__(self):
serializer = self.callback.cls.serializer_class
if hasattr(serializer, 'get_fields'):
try:
fields = [{
"name": key,
"type": str(field.__class__.__name__),
"required": field.required
} for key, field in serializer().get_fields().items()]
fields = self.__get_fields__(serializer)
except KeyError as e:
self.errors = e
fields = []
Expand All @@ -64,6 +61,24 @@ def __get_serializer_fields__(self):

return fields

def __get_fields__(self, serializer):
fields = []
for key, field in serializer().get_fields().items():
item = dict(
name=key,
type=str(field.__class__.__name__),
required=field.required
)
if isinstance(field, (serializers.ListSerializer, serializers.ListField)):
sub_type = field.child.__class__
item['sub_type'] = str(sub_type.__name__)
if isinstance(sub_type(), serializers.Serializer):
item['fields'] = self.__get_fields__(sub_type)
elif isinstance(field, serializers.Serializer):
item['fields'] = self.__get_fields__(field)
fields.append(item)
return fields

def __get_serializer_fields_json__(self):
# FIXME:
# Return JSON or not?
Expand Down
14 changes: 14 additions & 0 deletions rest_framework_docs/templates/rest_framework_docs/fields.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<ul class="list fields">
{% for field in item.fields %}
<li class="field">
{{ field.name }}: {{ field.type }} {% if field.required %}<span class="label label-primary label-required"
title="Required">R</span>{% endif %}
{% if field.sub_type %} ({{ field.sub_type }}) {% endif %}
{% if field.fields %}
{% with field as item %}
{% include 'rest_framework_docs/fields.html' %}
{% endwith %}
{% endif %}
</li>
{% endfor %}
</ul>
9 changes: 3 additions & 6 deletions rest_framework_docs/templates/rest_framework_docs/home.html
Original file line number Diff line number Diff line change
Expand Up @@ -65,14 +65,11 @@ <h4 class="panel-title title">
{% if endpoint.errors %}
<div class="alert alert-danger" role="alert">Oops! There was something wrong with {{ endpoint.errors }}. Please check your code.</div>
{% endif %}

{% if endpoint.fields %}
<p class="fields-desc">Fields:</p>
<ul class="list fields">
{% for field in endpoint.fields %}
<li class="field">{{ field.name }}: {{ field.type }} {% if field.required %}<span class="label label-primary label-required" title="Required">R</span>{% endif %}</li>
{% endfor %}
</ul>
{% with endpoint as item %}
{% include 'rest_framework_docs/fields.html' %}
{% endwith %}
{% elif not endpoint.errors %}
<p>No fields.</p>
{% endif %}
Expand Down