From 7bcea2f3ac05f62aacee6fc788bf8d8a8d63badb Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Tue, 28 Mar 2017 22:12:02 +1100 Subject: [PATCH] Added REST framework - /part/ URL is now a JSON api --- InvenTree/InvenTree/settings.py | 4 ++++ InvenTree/part/serializers.py | 20 ++++++++++++++++ InvenTree/part/urls.py | 14 ++++++----- InvenTree/part/views.py | 42 +++++++++++++++------------------ 4 files changed, 51 insertions(+), 29 deletions(-) create mode 100644 InvenTree/part/serializers.py diff --git a/InvenTree/InvenTree/settings.py b/InvenTree/InvenTree/settings.py index 733676ec38..e0cc196543 100644 --- a/InvenTree/InvenTree/settings.py +++ b/InvenTree/InvenTree/settings.py @@ -31,6 +31,9 @@ ALLOWED_HOSTS = [] # Application definition INSTALLED_APPS = [ + 'rest_framework', + + # Core django modules 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', @@ -38,6 +41,7 @@ INSTALLED_APPS = [ 'django.contrib.messages', 'django.contrib.staticfiles', + # InvenTree apps 'part.apps.PartConfig', 'project.apps.ProjectConfig', 'stock.apps.StockConfig', diff --git a/InvenTree/part/serializers.py b/InvenTree/part/serializers.py new file mode 100644 index 0000000000..1174e6684b --- /dev/null +++ b/InvenTree/part/serializers.py @@ -0,0 +1,20 @@ +from rest_framework import serializers + +from .models import Part, PartCategory + +class PartSerializer(serializers.ModelSerializer): + class Meta: + model = Part + fields = ('pk', + 'IPN', + 'description', + 'category', + 'quantity') + +class PartCategorySerializer(serializers.ModelSerializer): + class Meta: + model = PartCategory + fields = ('pk', + 'name', + 'description', + 'path') \ No newline at end of file diff --git a/InvenTree/part/urls.py b/InvenTree/part/urls.py index db6550fba6..d07d35052b 100644 --- a/InvenTree/part/urls.py +++ b/InvenTree/part/urls.py @@ -4,12 +4,14 @@ from . import views urlpatterns = [ # Display part detail - url(r'^(?P[0-9]+)/$', views.partDetail, name='detail'), - - # Display a list of top-level categories - url(r'^category/$', views.categoryList, name='categorylist'), + url(r'^(?P[0-9]+)/$', views.PartDetail.as_view()), # Display a single part category - url(r'^category/(?P[0-9]+)/$', views.category, name='category'), - url(r'^$', views.index, name='index') + url(r'^category/(?P[0-9]+)/$', views.PartCategoryDetail.as_view()), + + # Display a list of top-level categories + url(r'^category/$', views.PartCategoryList.as_view()), + + # Display list of parts + url(r'^$', views.PartList.as_view()) ] \ No newline at end of file diff --git a/InvenTree/part/views.py b/InvenTree/part/views.py index 3eb1446e6c..6520785a82 100644 --- a/InvenTree/part/views.py +++ b/InvenTree/part/views.py @@ -1,34 +1,30 @@ from django.shortcuts import render, get_object_or_404 -from django.http import HttpResponse +from django.http import HttpResponse, Http404 + +from rest_framework import generics from .models import PartCategory, Part +from .serializers import PartSerializer, PartCategorySerializer def index(request): return HttpResponse("Hello world. This is the parts page") -def partDetail(request, part_id): - - part = get_object_or_404(Part, pk=part_id) - - return render(request, 'part/detail.html', - {'part': part}) +class PartDetail(generics.RetrieveAPIView): -def categoryList(request): - categories = PartCategory.objects.filter(parent = None) - - return render(request, 'part/categorylist.html', - {'categories': categories - }) + queryset = Part.objects.all() + serializer_class = PartSerializer -def category(request, category_id): +class PartList(generics.ListAPIView): + + queryset = Part.objects.all() + serializer_class = PartSerializer + +class PartCategoryDetail(generics.RetrieveAPIView): - # Find the category - cat = get_object_or_404(PartCategory, pk=category_id) + queryset = PartCategory.objects.all() + serializer_class = PartCategorySerializer - # Child categories - childs = PartCategory.objects.filter(parent = cat.pk) - - return render(request, 'part/category.html', - {'category': cat, - 'children': childs - }) \ No newline at end of file +class PartCategoryList(generics.ListAPIView): + + queryset = PartCategory.objects.all() + serializer_class = PartCategorySerializer \ No newline at end of file