I was writing the api for booking section.
I am trying to make a management ptoject.
The registration have feilds and i have to make rest api. When I am passing values from postman it is showing these error
Models.py
class BookingRegister(models.Model):
STATUS = [('Booked','Booked'), ('InTransit','InTransit'), ('AtDestination','AtDestination'), ('Delivered','Delivered'), ('Return','Return')]
PAYMENT_TYPE = [('Paid','Paid'), ('ToPay','ToPay'), ('ToBeBilled','ToBeBilled')]
TRANSPORT_MODE = [('AIR','AIR'), ('ROAD','ROAD'), ('WATER','WATER')]
PACKAGE_TYPE = [('TIN','TIN'), ('BOX','BOX'), ('BUNDLE','BUNDLE'), ('CARTOON','CARTOON')]
TAX_PERCENTAGES = [(5,'5%'), (8,'8%'), (10,'10%'), (15,'15%'), (18,'18%')]
RATE_AS_PER = [('QTY','QTY'), ('WT','WT')]
id = models.AutoField(primary_key=True)
#bookingDetails=models.OneToOneField(BookingRegisterDetails, on_delete=models.CASCADE)
status = models.CharField(max_length=15, choices=STATUS)
paymentType = models.CharField(max_length=10, choices=PAYMENT_TYPE)
consignor = models.ForeignKey(Party, on_delete=models.CASCADE, related_name='consignor')
consignee = models.ForeignKey(Party, on_delete=models.CASCADE, related_name='consignee')
origin = models.ForeignKey(City, on_delete=models.CASCADE, related_name='origin')
destination = models.ForeignKey(City, on_delete=models.CASCADE, related_name='destination')
bookingPoint = models.ForeignKey(Branch, on_delete=models.CASCADE, related_name='bookingPoint')
deliveryPoint = models.ForeignKey(Branch, on_delete=models.CASCADE, related_name='deliveryPoint')
bookingDate = models.DateField()
transportMode = models.CharField(choices=TRANSPORT_MODE, default='ROAD', max_length=15)
createdTime = models.DateTimeField(editable=False, default=datetime.now)
updatedTime = models.DateTimeField(editable=False, default=datetime.now)
packageType = models.CharField(choices=PACKAGE_TYPE, default='CARTOON', max_length=15)
itemName = models.CharField(max_length=30)
quantity = models.IntegerField()
actualWeight = models.FloatField(default=0)
grossWeight = models.FloatField(default=actualWeight)
taxPercentage = models.IntegerField(choices=TAX_PERCENTAGES)
rateAsPer = models.CharField(choices=RATE_AS_PER, max_length=5)
rate = models.FloatField()
serviceCharge = models.FloatField(default=0)
bookingCharge = models.FloatField(default=0)
loadingCharge = models.FloatField(default=0)
unloadingCharge = models.FloatField(default=0)
total = models.FloatField(default=0)
def __str__(self) -> str:
return str(self.id)+" "+self.status+" "+self.paymentType+" "+self.consignor+" "+self.consignee <br>
views.py
class BookingRegisterAPI(APIView):
def get(self, request, id=None, format=None):
if id:
try:
booking=BookingRegister.objects.get(pk=id)
#bookingDetails=BookingRegisterDetails.objects.select_related(bookingId=id)
serializer = TransportSerializer.BookingRegisterSerializer(booking)
return Response(serializer.data)
except:
return Response("No record found", status=status.HTTP_404_NOT_FOUND)
def post(self, request, id=None, format=None):
serializer=TransportSerializer.BookingRegisterSerializer(data=request.data)
print(serializer.build_unknown_field)
try:
print("go")
if serializer.is_valid():
print("val")
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response("Not valid")
except:
return Response("Please enter valid data", status=status.HTTP_208_ALREADY_REPORTED)
Serialiser.py
class TransportSerializer:
class BranchSerializer(serializers.ModelSerializer):
class Meta:
model=Branch
fields=['id', 'name', 'cityId']
class PartySerializer(serializers.ModelSerializer):
class Meta:
model=Party
fields=['id', 'firstName', 'lastName', 'cityId', 'adhaar']
class BookingRegisterSerializer(serializers.ModelSerializer):
class Meta:
model=BookingRegister
fields=['id', 'status', 'paymentType','consignor', 'consignee',
'origin', 'destination', 'bookingPoint', 'deliveryPoint', 'bookingDate',
'packageType', 'itemName', 'quantity', 'actualWeight', 'grossWeight',
'taxPercentage', 'rateAsPer', 'rate', 'serviceCharge', 'bookingCharge',
'loadingCharge', 'unloadingCharge','total']
My postman payload
{
"status": "Booked",
"paymentType":"Paid",
"consignor":1,
"consignee":2,
"origin":1,
"destination":2,
"bookingPoint":4,
"deliveryPoint":5,
"bookingDate":"21/08/2022",
"packageType":"BOX",
"itemName":"Medicine",
"quantity":5,
"actualWeight":"50",
"grossWeight":50,
"taxPercentage":"5%",
"rateAsPer":"QTY",
"rate":10,
"serviceCharge":0,
"bookingCharge":0,
"loadingCharge":0,
"unloadingCharge":0,
"total":50
}
I dont know where i am making mistake. Can anyone please help me in this.
There was error in payload.
We can simply check the error while serializer by ->
print(serializer.error_messages)