Add API endpoint and serializer for BuildItem model

This commit is contained in:
Oliver Walters 2019-04-29 22:59:42 +10:00
parent 17d9d25fb9
commit c29827e45a
5 changed files with 49 additions and 7 deletions

View File

@ -9,10 +9,10 @@ from django_filters.rest_framework import DjangoFilterBackend
from rest_framework import filters
from rest_framework import generics, permissions
from django.conf.urls import url
from django.conf.urls import url, include
from .models import Build
from .serializers import BuildSerializer
from .models import Build, BuildItem
from .serializers import BuildSerializer, BuildItemSerializer
class BuildList(generics.ListCreateAPIView):
@ -36,10 +36,37 @@ class BuildList(generics.ListCreateAPIView):
]
filter_fields = [
'part',
'build',
]
build_api_urls = [
url(r'^.*$', BuildList.as_view(), name='api-build-list')
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 = [
url(r'^item/?', include(build_item_api_urls)),
url(r'^.*$', BuildList.as_view(), name='api-build-list'),
]

View File

@ -28,6 +28,9 @@ class Build(models.Model):
notes: Text notes
"""
def __str__(self):
return "Build {q} x {part}".format(q=self.quantity, part=str(self.part))
def get_absolute_url(self):
return reverse('build-detail', kwargs={'pk': self.id})

View File

@ -34,10 +34,13 @@ class BuildSerializer(InvenTreeModelSerializer):
class BuildItemSerializer(InvenTreeModelSerializer):
""" Serializes a BuildItem object """
part = serializers.CharField(source='stock_item.part', read_only=True)
class Meta:
model = BuildItem
fields = [
'build',
'stock',
'part',
'stock_item',
'quantity'
]

View File

@ -73,6 +73,7 @@
{% endif %}
</table>
{% if build.is_active %}
<h3>Required Parts</h3>
<table class='table table-striped' id='build-list' data-sorting='true'>
<thead>
@ -93,6 +94,8 @@
</tbody>
</table>
{% endif %}
{% include 'modals.html' %}
{% endblock %}

View File

@ -307,6 +307,12 @@ class Part(models.Model):
def used_in_count(self):
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
def supplier_count(self):
# Return the number of supplier parts available for this part