python - Django 3.2.3 我正在尝试使用其字段和属性方法序列化对象
问题描述
我是 django 框架的新手,我只想将一个模型对象及其属性和属性作为 Json 响应返回给 ajax 调用。我有一个带有属性 balance 的 Item 模型,它返回一个整数值。这是我的代码:
模型.py
class Item(models.Model):
entered_by = models.ForeignKey(User, on_delete=models.PROTECT)
name = models.CharField(max_length=50, blank=True)
@property
def balance(self):
return Stock.objects.filter(item_id=self.id).aggregate(Sum('quantity')).get('quantity__sum')
class Stock(models.Model):
item = models.ForeignKey(Item, on_delete=models.PROTECT)
name = models.CharField(max_length=50, blank=True)
quantity = models.PositiveIntegerField()
序列化程序.py
from rest_framework import serializers
from .models import Item
class ItemSerializer(serializers.ModelSerializer):
balance = serializers.SerializerMethodField(source="get_balance")
class Meta:
model = Item
fields = ('entered_by', 'name', 'balance')
视图.py
from stocks.serializers import *
from django.http import HttpResponse, JsonResponse
def viewItem(request):
if request.is_ajax and request.method == "GET":
id = request.GET.get("item_id", None)
item = Item.objects.get(id=id)
if item:
serializer = ItemSerializer()
# return serializer.data
return JsonResponse(serializer.data, status = 200)
我正在寻找的输出是这样的 Json 输出:
{
name:"item name",
entered_by: null,
balance: 10,
}
现在这就是我得到的
{
entered_by: null
name: ""
}
任何想法都会受到赞赏。
解决方案
您必须在序列化程序中传递对象,因此:
serializer = ItemSerializer(item)
return JsonResponse(serializer.data, status=200)
或速记:
return JsonResponse(ItemSerializer(item).data, status=200)
编辑:
对于您的序列化程序中的问题,它是因为source
. 尝试将其更改为:
class ItemSerializer(serializers.ModelSerializer):
balance = serializers.SerializerMethodField()
class Meta:
model = Item
fields = ('entered_by', 'name', 'balance')
def get_balance(self, obj)
return obj.balance
推荐阅读
- reactjs - 将组件 propTypes 获取为字符串
- java - 无法使用双精度数据类型打印精确值
- c# - 树形结构保持反转
- mockito - 如何使用 Mockito 测试这种类型的方法?
- json - 交换键和值并累积值
- windows - gradle在Windows上没有构建输出
- ios - 如何在给定 rowid 列表的情况下快速查询 SQLite?
- msmq - Hangfire MSMQ 在服务器 1 中处理但卡在服务器 2 中
- javascript - jquery 1.4.2.min.js 和 jquery 1.11.0.js 一起使用时发生冲突
- wordpress - WordPress 节奏主题社交图标样式更改为标题