Python 如何在Django Rest框架中清理@property变量的json输出
问题是,当我对这个模型执行get请求时,JSON响应不是干净的,这使得在改造中很难使用它 以下是一个JSON输出示例:Python 如何在Django Rest框架中清理@property变量的json输出,python,django,django-rest-framework,Python,Django,Django Rest Framework,问题是,当我对这个模型执行get请求时,JSON响应不是干净的,这使得在改造中很难使用它 以下是一个JSON输出示例: [ { "id": 1, "restName": "Buddy's", "banner": "http://127.0.0.1:8000/media/buddysImg.jpg", "zipcode": 48212, "restRating": { "rating__
[
{
"id": 1,
"restName": "Buddy's",
"banner": "http://127.0.0.1:8000/media/buddysImg.jpg",
"zipcode": 48212,
"restRating": {
"rating__avg": 4.0
},
"website": "Buddys.com",
"phone": 3138929001,
"restPrice": 0.0
}
]
这就是我想要的样子:
[
{
"id": 1,
"restName": "Buddy's",
"banner": "http://127.0.0.1:8000/media/buddysImg.jpg",
"zipcode": 48212,
"restRating": 4.0,
"website": "Buddys.com",
"phone": 3138929001,
"restPrice": 0.0
}
]
这是我的模型:
class Rest(models.Model):
restName = models.CharField(max_length=50, null=False, default = " ")
zipcode = models.PositiveIntegerField( null=False, default = 0)
#restRating = models.FloatField( null=False, default = 0)
banner = models.ImageField( null=True)
website = models.CharField(max_length=50, null=False, default = " ")
phone = models.PositiveIntegerField( null=False, default = 0)
restPrice = models.FloatField( null=False, default = 0)
@property
def restRating(self):
avg = Rating.objects.filter(restId=self.pk).aggregate(Avg('rating'))
return avg
def __str__(self):
return self.restName
这是我的序列化程序:
class restSerializer(serializers.ModelSerializer):
restRating = serializers.FloatField
class Meta:
model = Rest
fields = ['id', 'restName', 'banner', 'zipcode', 'restRating', 'website', 'phone', 'restPrice']
谢谢您的帮助。您只能从您的属性返回值。您需要将您的属性更改为:
@property
def restRating(self):
avg = Rating.objects.filter(restId=self.pk).aggregate(Avg('rating'))['rating__avg']
return avg
从文档中:
aggregate()是QuerySet的一个终端子句,在调用时,
返回名称-值对的字典。名称是一个标识符
总价值;该值是计算出的聚合。名字
根据字段的名称和
聚合函数