Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在Django Rest框架中清理@property变量的json输出_Python_Django_Django Rest Framework - Fatal编程技术网

Python 如何在Django Rest框架中清理@property变量的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__

问题是,当我对这个模型执行get请求时,JSON响应不是干净的,这使得在改造中很难使用它

以下是一个JSON输出示例:

[
    {
        "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的一个终端子句,在调用时, 返回名称-值对的字典。名称是一个标识符 总价值;该值是计算出的聚合。名字 根据字段的名称和 聚合函数