Как я могу автоматически обновлять мою базу данных в django rest?

Мне нужно сделать статус заказа, где есть 3 колонки: orderId, item_name, status. Заказ может иметь несколько позиций, и каждая позиция может иметь разный статус. Поэтому мне нужно сделать конечную точку, которая будет возвращать статус заказа. Пример: если заказ 1 имеет 3 позиции, и 2 из них имеют статус: "Отправлен", а другой - "В ожидании", ожидаемый результат статуса заказа - "В ожидании", потому что не все товары были отправлены.

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']

преобразуйте поле status в свойство примерно так:

class OrderStatus(models.Model):
    choice = (('SHIPPED', 'SHIPPED'), ('PENDING', 'PENDING'), ('CANCELLED', 'CANCELLED'))
    OrderNumber = models.CharField(max_length=255, unique=True)

    def __str__(self):
        return self.OrderNumber
    @property
    def status(self)->str:
        # do your logic to get the correct status here
        return "SHIPPED"

затем в сериализаторе добавьте:

status = serializers.CharField(required=False, read_only=True)

    
Вернуться на верх