I have to make a order status, where there are 3 columns: orderId, item_name, status. An order can have multiple items, and every item can have diferemt status. So what i have to do is an endpoint that return the status of the order. Example: if the order 1, has 3 items, and 2 of the items have the status: "Shipped" and the other is "Pending", the expected result of that order status is "Pending", because not all the item have been shipped.
models.py
from django.db import models
import requests
class OrderStatus(models.Model):
choice = (('SHIPPED', 'SHIPPED'), ('PENDING', 'PENDING'), ('CANCELLED', 'CANCELLED'))
OrderNumber = models.CharField(max_length=255, unique=True)
status = models.CharField(max_length=255, choices=choice)
def __str__(self):
return self.OrderNumber
class OrderItems(models.Model):
id = models.AutoField(primary_key=True)
choice = (('SHIPPED', 'SHIPPED'), ('PENDING', 'PENDING'), ('CANCELLED', 'CANCELLED'))
itemName = models.CharField(max_length=255)
OrderNumber = models.ForeignKey(OrderStatus, related_name='items', on_delete=models.CASCADE)
status = models.CharField(max_length=255, choices=choice)
def __str__(self):
return self.status
Views.py
from rest_framework.viewsets import ModelViewSet
from OrderStatus.api.serializers import OrderRegisterSerializer, NumberOrderSerializer
from OrderStatus.models import OrderItems, OrderStatus
class OrderApiViewSet(ModelViewSet):
serializer_class = OrderRegisterSerializer
queryset = OrderItems.objects.all()
class OrderNumberApiviewSet(ModelViewSet):
serializer_class = NumberOrderSerializer
queryset = OrderStatus.objects.all()
serializers.py
from OrderStatus.models import OrderItems, OrderStatus
from rest_framework import serializers
class OrderRegisterSerializer(serializers.ModelSerializer):
#items = serializers.RelatedField(many=True, queryset = OrderItems.objects.all())
class Meta:
model = OrderItems
fields = ['itemName', 'OrderNumber', 'status']
order_by = 'OrderNumber'
class NumberOrderSerializer(serializers.ModelSerializer):
#test = serializers.CharField(source='OrderItems.status', read_only=True)
#data= OrderItems.objects.filter(OrderNumber__contains= = '1')
class Meta:
model = OrderStatus
fields = ['OrderNumber', 'status', 'OrderItems']