mirror of
				https://github.com/inventree/InvenTree.git
				synced 2025-10-31 13:15:43 +00:00 
			
		
		
		
	Add API endpoint and serializer for BuildItem model
This commit is contained in:
		| @@ -9,10 +9,10 @@ from django_filters.rest_framework import DjangoFilterBackend | |||||||
| from rest_framework import filters | from rest_framework import filters | ||||||
| from rest_framework import generics, permissions | from rest_framework import generics, permissions | ||||||
|  |  | ||||||
| from django.conf.urls import url | from django.conf.urls import url, include | ||||||
|  |  | ||||||
| from .models import Build | from .models import Build, BuildItem | ||||||
| from .serializers import BuildSerializer | from .serializers import BuildSerializer, BuildItemSerializer | ||||||
|  |  | ||||||
|  |  | ||||||
| class BuildList(generics.ListCreateAPIView): | class BuildList(generics.ListCreateAPIView): | ||||||
| @@ -36,10 +36,37 @@ class BuildList(generics.ListCreateAPIView): | |||||||
|     ] |     ] | ||||||
|  |  | ||||||
|     filter_fields = [ |     filter_fields = [ | ||||||
|         'part', |         'build', | ||||||
|     ] |     ] | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class BuildItemList(generics.ListCreateAPIView): | ||||||
|  |     """ API endpoint for accessing a list of BuildItem objects | ||||||
|  |  | ||||||
|  |     - GET: Return list of objects | ||||||
|  |     - POST: Create a new BuildItem object | ||||||
|  |     """ | ||||||
|  |  | ||||||
|  |     queryset = BuildItem.objects.all() | ||||||
|  |     serializer_class = BuildItemSerializer | ||||||
|  |  | ||||||
|  |     permission_classes = [ | ||||||
|  |         permissions.IsAuthenticatedOrReadOnly, | ||||||
|  |     ] | ||||||
|  |  | ||||||
|  |     filter_fields = [ | ||||||
|  |         'build', | ||||||
|  |         'part', | ||||||
|  |         'stock_item' | ||||||
|  |     ] | ||||||
|  |  | ||||||
|  |  | ||||||
|  | build_item_api_urls = [ | ||||||
|  |     url('^.*$', BuildItemList.as_view(), name='api-build-item-list'), | ||||||
|  | ] | ||||||
|  |  | ||||||
| build_api_urls = [ | build_api_urls = [ | ||||||
|     url(r'^.*$', BuildList.as_view(), name='api-build-list') |     url(r'^item/?', include(build_item_api_urls)), | ||||||
|  |  | ||||||
|  |     url(r'^.*$', BuildList.as_view(), name='api-build-list'), | ||||||
| ] | ] | ||||||
|   | |||||||
| @@ -28,6 +28,9 @@ class Build(models.Model): | |||||||
|         notes: Text notes |         notes: Text notes | ||||||
|     """ |     """ | ||||||
|  |  | ||||||
|  |     def __str__(self): | ||||||
|  |         return "Build {q} x {part}".format(q=self.quantity, part=str(self.part)) | ||||||
|  |  | ||||||
|     def get_absolute_url(self): |     def get_absolute_url(self): | ||||||
|         return reverse('build-detail', kwargs={'pk': self.id}) |         return reverse('build-detail', kwargs={'pk': self.id}) | ||||||
|  |  | ||||||
|   | |||||||
| @@ -34,10 +34,13 @@ class BuildSerializer(InvenTreeModelSerializer): | |||||||
| class BuildItemSerializer(InvenTreeModelSerializer): | class BuildItemSerializer(InvenTreeModelSerializer): | ||||||
|     """ Serializes a BuildItem object """ |     """ Serializes a BuildItem object """ | ||||||
|  |  | ||||||
|  |     part = serializers.CharField(source='stock_item.part', read_only=True) | ||||||
|  |  | ||||||
|     class Meta: |     class Meta: | ||||||
|         model = BuildItem |         model = BuildItem | ||||||
|         fields = [ |         fields = [ | ||||||
|             'build', |             'build', | ||||||
|             'stock', |             'part', | ||||||
|  |             'stock_item', | ||||||
|             'quantity' |             'quantity' | ||||||
|         ] |         ] | ||||||
|   | |||||||
| @@ -73,6 +73,7 @@ | |||||||
| {% endif %} | {% endif %} | ||||||
| </table> | </table> | ||||||
|  |  | ||||||
|  | {% if build.is_active %} | ||||||
| <h3>Required Parts</h3> | <h3>Required Parts</h3> | ||||||
| <table class='table table-striped' id='build-list' data-sorting='true'> | <table class='table table-striped' id='build-list' data-sorting='true'> | ||||||
| <thead> | <thead> | ||||||
| @@ -93,6 +94,8 @@ | |||||||
| </tbody> | </tbody> | ||||||
| </table> | </table> | ||||||
|  |  | ||||||
|  | {% endif %} | ||||||
|  |  | ||||||
| {% include 'modals.html' %} | {% include 'modals.html' %} | ||||||
|  |  | ||||||
| {% endblock %} | {% endblock %} | ||||||
|   | |||||||
| @@ -307,6 +307,12 @@ class Part(models.Model): | |||||||
|     def used_in_count(self): |     def used_in_count(self): | ||||||
|         return self.used_in.count() |         return self.used_in.count() | ||||||
|  |  | ||||||
|  |     def required_parts(self): | ||||||
|  |         parts = [] | ||||||
|  |         for bom in self.bom_items.all(): | ||||||
|  |             parts.append(bom.sub_part) | ||||||
|  |         return parts | ||||||
|  |  | ||||||
|     @property |     @property | ||||||
|     def supplier_count(self): |     def supplier_count(self): | ||||||
|         # Return the number of supplier parts available for this part |         # Return the number of supplier parts available for this part | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user