【问题标题】:How to define custom check according to my rules and how to implement Django如何根据我的规则定义自定义检查以及如何实现Django
【发布时间】:2022-12-03 13:06:29
【问题描述】:

我用的是Python 3.10,Django 4.1.2,djangorestframework==3.14.0(前面分开)

在订单中,products received 字段默认为空。当我们收到订单时,我们必须从 ordered 字段中删除这些元素并将它们转移到接收到的字段中。

  1. 收到的产品必须仅包含请求产品中的产品
  2. 提交包含收到产品数量的请求后,应从请求的产品中删除此特定产品并添加到 recived_products

    我有两个理论实现的想法。

    1. 使用补丁、received_product 和其中的元素
    2. 分离法

      我有这段代码:

      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)
      

      拜托,我要求您提供有关此实现的正确示例。我还是开发新手

【问题讨论】:

    标签: python django django-models django-rest-framework


    【解决方案1】:

    我不会写完整的代码,但你可以试试这个逻辑 -

    为视图集或视图定义一个 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)
    

    希望这可以帮助。

    【讨论】:

      猜你喜欢
      • 2011-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-16
      • 2018-10-26
      • 2016-01-18
      • 1970-01-01
      相关资源
      最近更新 更多