Skip to content
Draft
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
Empty file added api/__init__.py
Empty file.
3 changes: 3 additions & 0 deletions api/admin.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
from django.contrib import admin

# Register your models here.
5 changes: 5 additions & 0 deletions api/apps.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
from django.apps import AppConfig


class ApiConfig(AppConfig):
name = 'api'
3 changes: 3 additions & 0 deletions api/models.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
from django.db import models

# Create your models here.
29 changes: 29 additions & 0 deletions api/serializers.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
from rest_framework import serializers

from workshop_app.models import Workshop, WorkshopType


class WorkshopTypeSerializer(serializers.ModelSerializer):

class Meta:
model = WorkshopType
exclude = ['terms_and_conditions']


class WorkshopTypeField(serializers.PrimaryKeyRelatedField):
def to_representation(self, value):
pk = super(WorkshopTypeField, self).to_representation(value)
items = WorkshopType.objects.filter(pk=pk)
if items.exists():
serializer = WorkshopTypeSerializer(items.first())
return serializer.data
else:
return None


class WorkshopSerializer(serializers.ModelSerializer):
workshop_type = WorkshopTypeField(read_only=True)

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We need the instructor name, not the id so, please add this line of code here

instructor=serializers.StringRelatedField(many=False)

I have tested it.

class Meta:
model = Workshop
exclude = ['tnc_accepted']
3 changes: 3 additions & 0 deletions api/tests.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
from django.test import TestCase

# Create your tests here.
7 changes: 7 additions & 0 deletions api/urls.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
from django.conf.urls import url

from api import views

urlpatterns = [
url(r'^upcoming_workshops$', views.UpcomingWorkshops.as_view(), name='index'),
]
20 changes: 20 additions & 0 deletions api/views.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# Create your views here.
from rest_framework.generics import ListAPIView

from api.serializers import WorkshopSerializer
from workshop_app.models import Workshop


class UpcomingWorkshops(ListAPIView):
serializer_class = WorkshopSerializer

def get_queryset(self):
params = self.request.GET
queryset = Workshop.objects.all()
if params.get('status', None):
queryset = queryset.filter(status=params.get('status'))
if params.get('date_from'):
queryset = queryset.filter(date__gte=params.get('date_from'))
if params.get('date_to'):
queryset = queryset.filter(date__lte=params.get('date_to'))
return queryset
2 changes: 2 additions & 0 deletions requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -5,3 +5,5 @@ pytz==2016.10
six==1.10.0
coverage
pyaml
djangorestframework==3.11.0
django-cors-headers==3.3.0
6 changes: 6 additions & 0 deletions workshop_portal/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,8 @@
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'corsheaders',
'rest_framework',
'workshop_app',
'statistics_app',
'teams',
Expand All @@ -52,12 +54,16 @@
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'corsheaders.middleware.CorsMiddleware',
'django.middleware.common.CommonMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

# Allow API cross origin requests from all origins
CORS_ORIGIN_ALLOW_ALL = True

ROOT_URLCONF = 'workshop_portal.urls'

TEMPLATES = [
Expand Down
2 changes: 1 addition & 1 deletion workshop_portal/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,5 +20,5 @@
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^', include('workshop_app.urls')),

url(r'^api/', include('api.urls'))
]