mirror of
				https://github.com/inventree/InvenTree.git
				synced 2025-10-31 21:25:42 +00:00 
			
		
		
		
	Added projects API
This commit is contained in:
		| @@ -17,6 +17,10 @@ class ProjectCategory(InvenTreeTree): | ||||
|         verbose_name = "Project Category" | ||||
|         verbose_name_plural = "Project Categories" | ||||
|  | ||||
|     @property | ||||
|     def projects(self): | ||||
|         return self.project_set.all() | ||||
|  | ||||
|  | ||||
| class Project(models.Model): | ||||
|     """ A Project takes multiple Part objects. | ||||
| @@ -57,7 +61,7 @@ class ProjectPart(models.Model): | ||||
|     quantity = models.PositiveIntegerField(default=1) | ||||
|     overage = models.FloatField(default=0) | ||||
|     overage_type = models.PositiveIntegerField( | ||||
|         default=1, | ||||
|         default=OVERAGE_ABSOLUTE, | ||||
|         choices=OVARAGE_CODES.items()) | ||||
|  | ||||
|     def __str__(self): | ||||
|   | ||||
							
								
								
									
										66
									
								
								InvenTree/project/serializers.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										66
									
								
								InvenTree/project/serializers.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,66 @@ | ||||
| from rest_framework import serializers | ||||
|  | ||||
| from .models import ProjectCategory, Project, ProjectPart | ||||
|  | ||||
| from part.serializers import PartBriefSerializer | ||||
|  | ||||
|  | ||||
| class ProjectPartSerializer(serializers.ModelSerializer): | ||||
|  | ||||
|     class Meta: | ||||
|         model = ProjectPart | ||||
|         fields = ('pk', | ||||
|                   'part', | ||||
|                   'project', | ||||
|                   'quantity', | ||||
|                   'overage', | ||||
|                   'overage_type') | ||||
|  | ||||
|  | ||||
| class ProjectBriefSerializer(serializers.ModelSerializer): | ||||
|     """ Serializer for displaying brief overview of a project | ||||
|     """ | ||||
|  | ||||
|  | ||||
|     class Meta: | ||||
|         model = Project | ||||
|         fields = ('pk', | ||||
|                   'name', | ||||
|                   'description', | ||||
|                   'category') | ||||
|  | ||||
|  | ||||
| class ProjectDetailSerializer(serializers.ModelSerializer): | ||||
|     """ Serializer for detailed project information | ||||
|     """ | ||||
|  | ||||
|     class Meta: | ||||
|         model = Project | ||||
|         fields = ('pk', | ||||
|                   'name', | ||||
|                   'description', | ||||
|                   'category') | ||||
|  | ||||
|  | ||||
| class ProjectCategoryBriefSerializer(serializers.ModelSerializer): | ||||
|  | ||||
|     class Meta: | ||||
|         model = ProjectCategory | ||||
|         fields = ('pk','name','description') | ||||
|  | ||||
|  | ||||
| class ProjectCategoryDetailSerializer(serializers.ModelSerializer): | ||||
|  | ||||
|     projects = ProjectBriefSerializer(many=True) | ||||
|  | ||||
|     children = ProjectCategoryBriefSerializer(many=True) | ||||
|  | ||||
|     class Meta: | ||||
|         model = ProjectCategory | ||||
|         fields = ('pk', | ||||
|                   'name', | ||||
|                   'description', | ||||
|                   'parent', | ||||
|                   'path', | ||||
|                   'children', | ||||
|                   'projects') | ||||
| @@ -3,5 +3,18 @@ from django.conf.urls import url | ||||
| from . import views | ||||
|  | ||||
| urlpatterns = [ | ||||
|     url(r'^$', views.index, name='index') | ||||
|     # Single project detail | ||||
|     url(r'^(?P<pk>[0-9]+)/$', views.ProjectDetail.as_view()), | ||||
|  | ||||
|     # Parts associated with a project | ||||
|     url(r'^(?P<pk>[0-9]+)/parts$', views.ProjectPartsList.as_view()), | ||||
|  | ||||
|     # List of all projects | ||||
|     url(r'^$', views.ProjectList.as_view()), | ||||
|  | ||||
|     # List of top-level project categories | ||||
|     url(r'^category/$', views.ProjectCategoryList.as_view()), | ||||
|  | ||||
|     # Detail of a single project category | ||||
|     url(r'^category/(?P<pk>[0-9]+)/$', views.ProjectCategoryDetail.as_view()) | ||||
| ] | ||||
|   | ||||
| @@ -1,5 +1,39 @@ | ||||
| from django.http import HttpResponse | ||||
| from rest_framework import generics | ||||
|  | ||||
| from .models import ProjectCategory, Project, ProjectPart | ||||
| from .serializers import ProjectBriefSerializer, ProjectDetailSerializer | ||||
| from .serializers import ProjectCategoryBriefSerializer, ProjectCategoryDetailSerializer | ||||
| from .serializers import ProjectPartSerializer | ||||
|  | ||||
| class ProjectDetail(generics.RetrieveAPIView): | ||||
|  | ||||
|     queryset = Project.objects.all() | ||||
|     serializer_class = ProjectDetailSerializer | ||||
|  | ||||
|  | ||||
| def index(request): | ||||
|     return HttpResponse("This is the Projects page") | ||||
| class ProjectList(generics.ListAPIView): | ||||
|  | ||||
|     queryset = Project.objects.all() | ||||
|     serializer_class = ProjectBriefSerializer | ||||
|  | ||||
|  | ||||
|  | ||||
| class ProjectCategoryDetail(generics.RetrieveAPIView): | ||||
|  | ||||
|     queryset = ProjectCategory.objects.all() | ||||
|     serializer_class = ProjectCategoryDetailSerializer | ||||
|  | ||||
|  | ||||
| class ProjectCategoryList(generics.ListAPIView): | ||||
|  | ||||
|     queryset = ProjectCategory.objects.filter(parent=None) | ||||
|     serializer_class = ProjectCategoryDetailSerializer | ||||
|  | ||||
|  | ||||
| class ProjectPartsList(generics.ListAPIView): | ||||
|  | ||||
|     serializer_class = ProjectPartSerializer | ||||
|  | ||||
|     def get_queryset(self): | ||||
|         project_id = self.kwargs['pk'] | ||||
|         return ProjectPart.objects.filter(project=project_id) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user