Python 通过序列化程序django访问属性
我有以下型号:Python 通过序列化程序django访问属性,python,django,Python,Django,我有以下型号: class OrderItem(models.Model): ordered_amount = models.IntegerField(validators=[MinValueValidator(0)]) amount = models.IntegerField(default=0) order = models.ForeignKey( Order, on_delete=models.CASCADE, related_name="orde
class OrderItem(models.Model):
ordered_amount = models.IntegerField(validators=[MinValueValidator(0)])
amount = models.IntegerField(default=0)
order = models.ForeignKey(
Order, on_delete=models.CASCADE, related_name="order_items"
)
class Order(models.Model):
reference = models.CharField(max_length=50)
purchase_order = models.CharField(max_length=15, blank=True, null=True)
我现在正在编写一个用于列出订单的序列化程序。在这个OrderSerializer中,我需要访问OrderItem类中的amount和ordered_amount。我该怎么做?
这就是我现在拥有的:
class AdminOrderListSerializer(serializers.ModelSerializer):
amount = serializers.IntegerField()
ordered_amount = serializers.IntegerField()
class Meta:
model = Order
fields = [
"purchase_order",
"reference",
"amount",
"ordered_amount",
]
# noinspection PyMethodMayBeStatic
def validate_amount(self, order):
if order.order_items.amount:
return order.order_items.amount
return
# noinspection PyMethodMayBeStatic
def validate_ordered_amount(self, order):
if order.order_items.ordered_amount:
return order.order_items.ordered_amount
return
这给了我以下错误:
AttributeError:在尝试获取序列化程序上的字段金额
的值时,获取了AttributeError。
序列化程序字段的名称可能不正确,并且与Order
实例上的任何属性或键都不匹配。
最初的异常文本是:“订单”对象没有属性“金额”。有很多方法可以做到这一点,其中之一是: 优化解 实现这一点的另一种方法是将数据发送到queryset,并在序列化程序中访问它们。为此,您需要在视图中进行更改:
class SomeView(ListAPIView):
queryset = Order.objects.annotate(amount=Sum('order_items__amount'),order_amount=Sum('order_items__order_amount'))
这是一个优化的解决方案,因为它减少了数据库命中率(只命中一次)。嘿,谢谢你的帮助!您为优化的解决方案编辑了序列化程序。不正确吗?不正确,没有必要。如果字段的名称与带注释的键匹配,则实际上不需要source属性(我编写了该属性,后来删除了该属性)来访问带注释的值。您可以使用已编写的序列化程序。
class SomeView(ListAPIView):
queryset = Order.objects.annotate(amount=Sum('order_items__amount'),order_amount=Sum('order_items__order_amount'))