Django Factory Boy 工厂中的简单计算已关闭

问题描述

我有以下工厂,它基本上根据生成的商品价格和数量动态计算 OrderLine 的总数:

class OrderLineFactory(factory.django.DjangoModelFactory):
    class Meta:
        model = OrderLine

    product_id = factory.SubFactory(ProductFactory)
    price = factory.LazyAttribute(lambda instance: Decimal(instance.product_id.price))
    quantity = fake.random_int(min=1,max=10)
    total = factory.LazyAttribute(lambda instance: Decimal(instance.product_id.price * instance.quantity))

    @factory.post_generation
    def order_total(object,create,extracted,**kwargs):
        """ Everytime an OrderLine is created the order's
            total will be updated """
        if not create:
            return
        print("CALculaTING TOTAL")
        print("Object TOTAL")
        print(object.total)
        order = Order.objects.get(pk=str(object.order_id))
        print("ORDER total")
        print(order.total)
        order.total = Decimal(order.total + (object.total))
        order.save()


class OrderFactory(factory.django.DjangoModelFactory):
    class Meta:
        model = Order

    session_id = factory.Faker('uuid4')

OrderLine 中的 total 的结果总是小数点后小数点。这是一个测试对象的结果:

{"id": "661a2b77-5fca-40d9-b34a-ddafee87415c","session_id": “1742dbd5-e91a-4ef3-8eea-6ec4bd51d567”,“小计”:“0.00”,“总计”: "680.46","items": [{"product_id": 1,"price": "75.61","quantity": 9,“总计”:“680.46”}]}

total 应该是 680.49,而是 680.46。

在另一次运行中:

{"id": "10a79436-1bad-4d10-be61-5d87108bca0c","session_id": “d9649ebd-1f82-424d-b65c-0212641ae987”,“小计”:“0.00”,“总计”: "690.64","price": "76.74",“总计”:“690.64”}]}

它应该是 690.66,但我得到的是 690.64。

知道为什么吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...