Как определить пользовательскую проверку в соответствии с моими правилами и как реализовать Django
Я использую Python 3.10, Django 4.1.2, djangorestframework==3.14.0 (front отдельно)
В заказе поле "Полученные товары" по умолчанию пустое. При получении заказа мы должны удалить эти элементы из поля заказанных товаров и перенести их в полученные.
- Полученные продукты должны содержать только продукты из запрашиваемых продуктов
- После отправки запроса с количеством полученных продуктов, этот конкретный продукт должен быть удален из запрашиваемых продуктов и добавлен в recived_products
У меня есть две идеи для теоретической реализации.
- Использование патча, полученного_продукта и элементов в нем
- Отдельный метод
У меня такой код:
class Orders(models.Model):
delivery_model_choices = (("Pickup", "Pickup"),
("Delivery", "Delivery"))
order_status_choices = (("Draft", "Draft"),
("Open", "Open"),
("Partially Received", "Partially Received"),
("Received", "Received"),
("Cancelled", "Cancelled"))
costumer = models.ManyToManyField(Costumers)
products = models.ManyToManyField(Products)
recived_products = ???
date_create = models.DateTimeField(auto_now_add=True)
delivery = models.CharField(max_length=40, choices=delivery_model_choices)
delivery_date = models.DateField()
order_status = models.CharField(max_length=40, choices=order_status_choices)
total_price = models.CharField(max_length=10)
Прошу Вас привести корректный пример по данной реализации. Я еще новичок в разработке
Я не буду писать полный код, но вы можете попробовать эту логику -
Определите метод Create для набора представлений или представлений (что бы вы ни использовали)
def create(self, request, format=None):
request.data is the data that you receive
all_product_recieved = all products that you have received
recived_products = all_product_recieved - ordered product
custom_data = create a new dictionary with valid data
then ...
serializer = self.get_serializer(data=custom_data)
if serializer.is_valid():
serializer.save()
return Response()
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
Надеюсь, это поможет.