Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 10 additions & 1 deletion drf_generators/generators.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,11 @@
from drf_generators.templates.viewset import VIEW_SET_URL, VIEW_SET_VIEW
from drf_generators.templates.function import FUNCTION_URL, FUNCTION_VIEW
from drf_generators.templates.modelviewset import MODEL_URL, MODEL_VIEW
from drf_generators.templates.genericviewset import GENERIC_URL, GENERIC_VIEW


__all__ = ['BaseGenerator', 'APIViewGenerator', 'ViewSetGenerator',
'FunctionViewGenerator', 'ModelViewSetGenerator']
'FunctionViewGenerator', 'ModelViewSetGenerator', 'GenericViewSetGenerator']


class BaseGenerator(object):
Expand Down Expand Up @@ -110,3 +112,10 @@ def __init__(self, app_config, force):
super(ModelViewSetGenerator, self).__init__(app_config, force)
self.view_template = Template(MODEL_VIEW)
self.url_template = Template(MODEL_URL)

class GenericViewSetGenerator(BaseGenerator):

def __init__(self, app_config, force):
super(GenericViewSetGenerator, self).__init__(app_config, force)
self.view_template = Template(GENERIC_VIEW)
self.url_template = Template(GENERIC_URL)
2 changes: 2 additions & 0 deletions drf_generators/management/commands/generate.py
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,8 @@ def handle_app_config(self, app_config, **options):
generator = FunctionViewGenerator(app_config, force)
elif fmt == 'modelviewset':
generator = ModelViewSetGenerator(app_config, force)
elif fmt == 'genericviewset':
generator = GenericViewSetGenerator(app_config, force)
else:
message = '\'%s\' is not a valid format. ' % options['format']
message += '(viewset, modelviewset, apiview, function)'
Expand Down
42 changes: 42 additions & 0 deletions drf_generators/templates/genericviewset.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@

__all__ = ['GENERIC_URL', 'GENERIC_VIEW']


GENERIC_URL = """from django.conf.urls import include, url
from {{ app }} import views


urlpatterns = [
{% for model in models %}
url(r'^{{ model|lower }}/(?P<pk>[0-9]+)/$', views.{{ model }}Detail.as_view()),
url(r'^{{ model|lower }}/$', views.{{ model }}List.as_view()),
{% endfor %}
]
"""


GENERIC_VIEW = """from rest_framework.permissions import IsAuthenticated
from rest_framework import generics

from {{ app }}.serializers import {{ serializers|join:', ' }}
from {{ app }}.models import {{ models|join:', ' }}
{% for model in models %}

class {{ model }}List(generics.ListCreateAPIView):

def get_queryset(self):
queryset = {{ model }}.objects.all()
return queryset

permission_classes = ( IsAuthenticated,)
serializer_class = {{ model }}Serializer

class {{ model }}Detail(generics.RetrieveUpdateDestroyAPIView):

def get_queryset(self):
queryset = {{ model }}.objects.all()
return queryset
serializer_class = {{ model }}Serializer
permission_classes = ( IsAuthenticated,)

{% endfor %}"""