Tracking API is hyperlinked

This commit is contained in:
Oliver Walters 2017-04-14 23:53:27 +10:00
parent 7c5261bc4a
commit a1db0c90e4
4 changed files with 15 additions and 23 deletions

View File

@ -45,7 +45,6 @@ class SupplierPartSerializer(serializers.ModelSerializer):
class Meta:
model = SupplierPart
#extra_kwargs = {'url': {'view_name': 'supplier-part-detail'}}
fields = ['url',
'part',
'supplier',

View File

@ -37,6 +37,10 @@ class UniquePart(models.Model):
and tracking all events in the life of a part
"""
class Meta:
# Cannot have multiple parts with same serial number
unique_together = ('part', 'serial')
objects = UniquePartManager()
part = models.ForeignKey(Part, on_delete=models.CASCADE)
@ -50,7 +54,7 @@ class UniquePart(models.Model):
editable=False)
serial = models.IntegerField()
createdBy = models.ForeignKey(User)
# createdBy = models.ForeignKey(User)
customer = models.ForeignKey(Customer, blank=True, null=True)
@ -76,17 +80,6 @@ class UniquePart(models.Model):
def __str__(self):
return self.part.name
def save(self, *args, **kwargs):
# Disallow saving a serial number that already exists
matches = UniquePart.objects.filter(serial=self.serial, part=self.part)
matches = matches.filter(~models.Q(id=self.id))
if len(matches) > 0:
raise ValidationError(_("Matching serial number already exists"))
super(UniquePart, self).save(*args, **kwargs)
class PartTrackingInfo(models.Model):
""" Single data-point in the life of a UniquePart

View File

@ -3,24 +3,24 @@ from rest_framework import serializers
from .models import UniquePart, PartTrackingInfo
class UniquePartSerializer(serializers.ModelSerializer):
class UniquePartSerializer(serializers.HyperlinkedModelSerializer):
tracking_info = serializers.PrimaryKeyRelatedField(many=True, read_only=True)
class Meta:
model = UniquePart
fields = ['pk',
fields = ['url',
'part',
'revision',
'creation_date',
'serial',
'createdBy',
# 'createdBy',
'customer',
'status',
'tracking_info']
class PartTrackingInfoSerializer(serializers.ModelSerializer):
class PartTrackingInfoSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = PartTrackingInfo

View File

@ -3,19 +3,19 @@ from django.conf.urls import url, include
from . import views
infopatterns = [
url(r'^(?P<pk>[0-9]+)/?$', views.PartTrackingDetail.as_view(), name='tracking-detail'),
url(r'^(?P<pk>[0-9]+)/?$', views.PartTrackingDetail.as_view(), name='parttrackinginfo-detail'),
url(r'^\?.*/?$', views.PartTrackingList.as_view(), name='tracking-list'),
url(r'^$', views.PartTrackingList.as_view(), name='tracking-list')
url(r'^\?.*/?$', views.PartTrackingList.as_view()),
url(r'^$', views.PartTrackingList.as_view())
]
urlpatterns = [
url(r'info/', include(infopatterns)),
# Detail for a single unique part
url(r'^(?P<pk>[0-9]+)/?$', views.UniquePartDetail.as_view(), name='unique-detail'),
url(r'^(?P<pk>[0-9]+)/?$', views.UniquePartDetail.as_view(), name='uniquepart-detail'),
# List all unique parts, with optional filters
url(r'^\?.*/?$', views.UniquePartList.as_view(), name='unique-list'),
url(r'^$', views.UniquePartList.as_view(), name='unique-list'),
url(r'^\?.*/?$', views.UniquePartList.as_view()),
url(r'^$', views.UniquePartList.as_view()),
]