Как я могу автоматически обновлять мою базу данных в 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)