首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >‘'float’对象在django queryset中不可迭代

‘'float’对象在django queryset中不可迭代
EN

Stack Overflow用户
提问于 2022-01-14 13:53:30
回答 1查看 101关注 0票数 0
代码语言:javascript
复制
class TransactionHistoryListSerializer(serializers.BaseSerializer):
    class Meta:
        model = CustomerVisit

    def to_representation(self, instance):

        price = 0
        package_price = booking_models.TestBooking.objects.filter(customer_visit=instance).values_list(
            "package__test__test_mrp", flat=True
        )[0]
        for price in package_price:
            pass

        return {
            "visit_id": instance.id,
            "customer_name": {
                "salutation": instance.customer.salutation,
                "first_name": instance.customer.first_name,
                "middle_name": instance.customer.middle_name,
                "last_name": instance.customer.last_name,
            },
            "dob": instance.customer.date_of_birth,
            "amount": sum([k.amount for k in booking_models.TestBooking.objects.filter(customer_visit=instance)])
            + (price if price else 0),
            "discount": sum([k.discount for k in booking_models.TestBooking.objects.filter(customer_visit=instance)]),
            "paid_amount": sum([k.amount for k in payment_models.Payment.objects.filter(customer_visit=instance)]),
        }

这里,tes_mrp是浮动类型。我搜索并找到解决方案,使用列表理解,但仍然没有工作。我尝试了[[price] for price in package_price]for price in package_price: a = list(str(price)),但是仍然不能迭代获取浮点对象。我肯定做错了什么。有人能帮忙吗。谢谢!!

EN

回答 1

Stack Overflow用户

发布于 2022-01-14 14:04:40

是在这一行中引起的,在package_price中是为了价格:

好吧,那是因为你在做.values_list(..., flat=True),它返回一个列表,然后用[0]索引它,所以你得到了第一个值。因此,package_price确实是一个浮点数,正如错误所述,您不能在单个浮点数上迭代。

因此,这个特定的比特只需去掉那个[0]就可以修复。

您的代码可以简化为不重复查询和使用Django的聚合:

代码语言:javascript
复制
def to_representation(self, instance):
    bookings = booking_models.TestBooking.objects.filter(customer_visit=instance)
    payments = payment_models.Payment.objects.filter(customer_visit=instance)

    package_price = bookings.values_list("package__test__test_mrp", flat=True).first()
    booking_amounts = bookings.aggregate(
        price_sum=Sum("amount"),
        discount_sum=Sum("discount"),
    )
    payment_amounts = payments.aggregate(
        payment_sum=Sum("amount"),
    )

    return {
        "visit_id": instance.id,
        "customer_name": {
            "salutation": instance.customer.salutation,
            "first_name": instance.customer.first_name,
            "middle_name": instance.customer.middle_name,
            "last_name": instance.customer.last_name,
        },
        "dob": instance.customer.date_of_birth,
        "amount": (booking_amounts.get("price_sum") or 0) + package_price,
        "discount": booking_amounts.get("discount_sum") or 0,
        "paid_amount": payment_amounts.get("payment_sum") or 0,
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70711653

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档