如何定义模型类变量来跟踪临时数据而不保存到数据库

2024-10-03 04:28:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试设计一个结账流程,在该流程中,税务信息需要经过一个查找表,以根据买家地址、产品价格等参数获得适当的税率。
我试图避免将税率作为购物车的一个属性存储为数据库中的一个模型字段,因为该值会随着结帐表单值的更改(购物车行项目更改或装运地址更改)而动态更改。它不仅仅是购物车或购物车行项目的属性,还取决于其他参数

我尝试在类中使用局部变量,在结帐过程中,一旦客户在后端单击PlaceOrder(POST to PaymentDetailsView),税务查询将完成,并通过设置该属性相应地添加到购物车中。我很难理解为什么变量值在设置后仍然为零。现在的查找返回的示例数为0.8,但稍后我会有一个更详细的查找方法

MODELS

class BagLine(models.Model):
    _unitTax = None
    bag = models.ForeignKey(Bag,
                            on_delete=models.CASCADE,
                            related_name='lines')
    product = models.ForeignKey(ProductDesign,
                                on_delete=models.CASCADE,
                                related_name='bagLines')
    quantity = models.PositiveIntegerField(default=1)

    @property
    def unitTax(self):
        return self._unitTax

    @unitTax.setter
    def unitTax(self, value):
        self._unitTax = value

    @property
    def isTaxKnown(self):
        print("unit tax is  ", self._unitTax)
        if self._unitTax is None:
            return False
        return True


class Bag(models.Model):
    ownerConsumer = models.ForeignKey(ConsumerClient, null=True, blank=True,
                                      on_delete=models.CASCADE, related_name="bags")

    @property
    def isTaxKnown(self):
        for line in self.lines.all():
            print("found a line with unit tax", line.unitTax)
            print("is tax known", line.isTaxKnown)
        return all([line.isTaxKnown for line in self.lines.all()])

VIEWS

class PaymentDetailsView(OrderPlacementMixin, APIView):

    def post(self, request, *args, **kwargs):
        return self.handle_place_order_submission(request)

    def handle_place_order_submission(self, request):
        return self.submit(**self.build_submission())

    def submit(self, user, bag, shipping_address, shipping_method,
               shipping_charge, billing_address, order_total,
               payment_kwargs=None, order_kwargs=None, surcharges=None):

        # Taxes must be known at this point
        assert bag.isTaxKnown, (
            "Bag tax must be set before a user can place an order")
        assert shipping_charge.isTaxKnown, (
            "Shipping charge tax must be set before a user can place an order")

    # Tax Lookup Method
    def apply_taxes_to_bag(self, bag, shipping_address):
        for line in bag.lines.all():
            line.unitTax = 0.8
            line.save()
            print("LINE unitTax", line.unitTax)
            print("LINE isTaxKnown", line.isTaxKnown)
        bag.save()
        print("BAG TAX KNOWN ", bag.isTaxKnown)

    def build_submission(self, **kwargs):
        """
        Return a dict of data that contains everything required for an order
        submission.  This includes payment details (if any).
        This can be the right place to perform tax lookups and apply them to
        the bag.
        """
        account_info = Account.get_account(self.request)
        bag = Bag().get_from_account(account_info)
        shipping_address = self.get_shipping_address(bag)
        self.apply_taxes_to_bag(bag, shipping_address)
        shipping_method = self.get_shipping_method(
            bag, shipping_address)
        billing_address = self.get_billing_address(shipping_address)
        submission = {
            'user': self.request.user,
            'bag': bag,
            'shipping_address': shipping_address,
            'shipping_method': shipping_method,
            'billing_address': billing_address,
        }
        return submission

Result

我收到我已包含的此断言错误:
“用户下单前必须设置行李税”
我的期望是,bag.IsTaxKnown有待定义,但我不理解为什么\u unitTax变量的值仍然是None或设置后变为None

This is the output from the console:

行单位税0.8
单位税为0.8
行isTaxKnown True
找到一行,单位税无
单位税为零
已知税款是否为假
单位税为零
已知行李税为假


Tags: selfnonesubmissionreturnaddressmodelsdefline