gpt4 book ai didi

python - 有选择地显示 Django REST 序列化程序字段

转载 作者:太空宇宙 更新时间:2023-11-04 10:29:44 25 4
gpt4 key购买 nike

我目前正在做一个项目,我很难创建一个需求。我们有一个使用 Django REST 构建的 API,我们希望能够仅在端点上显示更改的数据。

现在我们在端点上有一个功能,只有在进行了更改时才会返回页面。为了使它在 GET 请求中工作,输入是 UNIX 时间,然后将其转换为时间戳,然后将其与表示最后一次修改序列化模型的字段进行比较(通过 Django 的内置 auto_now).

例如:

...api.sample.com/endpoint/?request_time=1418929272.543132 <-- UNIX time stamp

如果在此时间戳后模型的任何字段发生任何类型的更改,则返回整个端点:

 {
"field1": "data1",
"field2": "data2",
"field3": "data3",
"field4": "data4",
"field5": "data5",
"field6": "data5",
}

我希望能够做的是让这种请求只返回已更改的字段:

 {
# Only field 1 and field 5 have changed since the specified time stamp
"field1": "data1",
"field5": "data5",
}

我一直在努力构建它,但没有找到令人满意的解决方案。尽管完整的答案会很好,但如果有人能在这里指出我正确的方向,我会很高兴。我一直在玩 django-model-utils 和一堆不同的 mixin 和序列化程序更改,但它们似乎都无法完成工作。

最佳答案

您必须有一些东西来存储每个字段的最后修改时间,无论它是在数据库、缓存还是其他神奇的地方。 Django 无法知道上次更新字段的时间,因为这不是通常需要存储的信息。

但我可以回答标题中的问题

How can I selectively display fields on a serializer?

这在 Django REST Framework 中是可能的,实际上在 the Dynamically modifying field section of the serializers documentation 中略有提及。 .您可以使用文档中提供的 mixin 提前为序列化程序中的所有字段执行此操作。如果您需要在序列化程序中逐个对象地执行此操作,您还可以覆盖序列化程序上的 to_representation

class DemoSerializer(serializers.Serializer):

def to_representation(self, instance):
data = super(DemoSerializer, self).to_representation(instance)

instance_type = data["type"]

if field_last_modified < last_modified:
data.pop("field")

return data

您可以使用 pop 从特定实例的返回数据中删除该字段,这将允许您控制返回哪些字段。

关于python - 有选择地显示 Django REST 序列化程序字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27558097/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com