首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自动在序列化程序上设置id内过滤器

自动在序列化程序上设置id内过滤器
EN

Stack Overflow用户
提问于 2022-03-02 12:07:14
回答 1查看 142关注 0票数 0

我试图从序列化内部的特定模型中获得总数。

代码语言:javascript
复制
"results": [
    {
       "event_id": 24,
       "unique_visitors": 1,
       "returned_visitors": 2
    },
]

我在unique_visitorsreturned_visitors中检索的两个值来自另一个模块。我在serializer.py做的事

代码语言:javascript
复制
unique_visitors = EventCounter.objects.filter(is_unique=True).filter(event_id=24).count()
returned_visitors = EventCounter.objects.filter(is_unique=False).filter(event_id=24).count()

def get_unique_visitors(self, obj):
    return self.unique_visitors

def get_returned_visitors(self, obj):
    return self.returned_visitors

我想要做的是在filter(event_id=24)中自动拥有当前对象的id。

你能帮帮我吗?

EN

回答 1

Stack Overflow用户

发布于 2022-03-03 04:03:37

因此,要达到预期的结果,您必须使用SerializerMethodField()

这是一个只读字段。它通过调用附加到的序列化程序类上的方法来获得它的值。

例如

代码语言:javascript
复制
from rest_framework import serializers

...
unique_visitors = serializers.SerializerMethodField()
returned_visitors = serializers.SerializerMethodField()
...

def get_unique_visitors(self, obj):
    unique_visitors = EventCounter.objects.filter(is_unique=True)\
                                      .filter(event_id=24).count()
    return unique_visitors

def get_returned_visitors(self, obj):
    returned_visitors = EventCounter.objects.filter(is_unique=False)\
                                      .filter(event_id=24).count()
    return returned_visitors

SerializerMethodField还接受一个名为method_name的可选参数,您可以添加它以更改附加字段的方法的名称。如果不包括,则默认为get_<field_name>

有关更多信息,请查看文档

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71322428

复制
相关文章

相似问题

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