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

发布于 2025-01-11 10:38:47 字数 713 浏览 0 评论 0原文

我正在尝试获取序列化中特定模型的总数。

"results": [
    {
       "event_id": 24,
       "unique_visitors": 1,
       "returned_visitors": 2
    },
]

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

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。

你能帮我吗?

I'm trying to get the total count from specific Model inside a Serialization.

"results": [
    {
       "event_id": 24,
       "unique_visitors": 1,
       "returned_visitors": 2
    },
]

The two value that i retrive in unique_visitors and returned_visitors come from one other module.
What i did in serializer.py:

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

What i try to do is to have inside the filter(event_id=24) the id of current object automatically.

Can you help me please?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

铁憨憨 2025-01-18 10:38:47

因此,要获得所需的结果,您必须使用SerializerMethodField()

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

例如,

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_

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

So to achieve the desired result, you have to use SerializerMethodField().

This is a read-only field. It gets its value by calling a method on the serializer class it is attached to.

For example

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 also accepts one optional param called method_name you can add it to change the name of the method that the field is attached to.
If not included this defaults to get_<field_name>.

Check the documentation for more info.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文