gpt4 book ai didi

python - Django Piston : How can I exclude nested fields from handler results? 这有可能吗?

转载 作者:太空狗 更新时间:2023-10-30 01:04:02 26 4
gpt4 key购买 nike

我正在对我为使用 django-piston 的 Django 应用程序编写的 API 进行最后的润色。 API 能够通过请求或 IP 地址进行搜索,分别是 RequestIPAddress 实例。每个请求可以有 1 个或多个与之关联的 IPAddress

因此,例如,我有一个 API 调用将显示所有 IPAddress 对象匹配“事件”、“非事件”或“全部”(两者之一)的事件状态。每个 IPAddress 实例关联的 Request 可用作 IPAddress.request

我遇到的问题是 Request.inputter 是提供请求的人的 User 实例的外键。当我为此 API 调用创建的处理程序返回我的结果时,将显示 User 实例中的所有字段,包括 password

这很糟糕;我不想要这个。

这是我的处理程序:

class SearchByIPStatusHandler(BaseHandler):
model = IPAddress
allowed_methods = ('GET',)
anonymous = AnonymousIPHandler

def read(self, request, status):
"""
Returns IP addresses based on activity status.
Status: 'active', 'inactive', 'all'

"""
if status == 'all':
return self.model.objects.all()
else:
active = True if (status=='active') else False
return self.model.objects.filter(active=active)

下面是 /api/show/all/ 的结果示例:

<response>
<resource>
<updated>2010-02-05 17:08:53.651729</updated>
<expires>2010-02-12 17:08:23</expires>
<created>2010-02-05 17:08:53.625318</created>
<nexthop>255.255.255.255</nexthop>
<netmask>255.255.255.254</netmask>
<address>2.4.6.80/31</address>
<active>True</active>
<id>4</id>
<request>
<updated>2010-02-05 17:08:53.382381</updated>
<created>2010-02-05 17:08:53.382313</created>
<expires>2010-02-12 17:08:23</expires>
<incident>20100212-badthings-01</incident>
<reason>bad things happened</reason>
<inputter>
<username>jathan</username>
<first_name>Jathan</first_name>
<last_name>McCollum</last_name>
<is_active>True</is_active>
<email>email@fake.notreal</email>
<is_superuser>True</is_superuser>
<is_staff>True</is_staff>
<last_login>2010-02-05 18:55:51.877746</last_login>
<password>[ENCRYPTED STRING I REDACTED]</password>
<id>1</id>
<date_joined>2010-01-28 09:56:32</date_joined>
</inputter>
<requester>joeuser</requester>
<active>True</active>
</request>
</resource>
</response>

在结果中我真正想要的是 inputter.username,而不是所有其他内容。我已尝试在处理程序上实现 exclude 属性的各种迭代都无济于事。如果我只是跳过整个请求字段,效果很好,如下所示:

在处理程序中:

exclude = ('request', )

结果是:

<response>
<resource>
<updated>2010-02-05 17:08:53.651729</updated>
<expires>2010-02-12 17:08:23</expires>
<created>2010-02-05 17:08:53.625318</created>
<nexthop>255.255.255.255</nexthop>
<netmask>255.255.255.254</netmask>
<address>2.4.6.80/31</address>
<active>True</active>
<id>4</id>
</resource>
</response>

但是这些结果也不是我想要的。

最后,我的问题是:

如何从处理程序结果中排除嵌套字段?有可能吗?

我已经尝试了以下的各种迭代,所有这些都没有结果,或者出现了意外结果:

# try to exclude request.inputter
exclude = ( ('request', ('inputter', ), ) )

# try to exclude request.inputter.password
exclude = ( ('request', ('inputter', ('password', ) ) ) )

我假设我误解或误用了在这种情况下完成字段排除的方式,因此非常感谢关于这个主题的任何启发。

最佳答案

您可以通过处理程序的 fields = 子句指定所需的字段来获得所需的结果。

来自外键的模型字段可以这样指定:

('foreign_model_field', ('nested_field1', 'nested_field2'))

在您的情况下,以下内容应该有效(为简洁起见,您的一些字段被省略):

fields = ('updated', 'expires', 'created', 
('request', ('incident', 'reason', ('inputter', ('username',)))))

关于python - Django Piston : How can I exclude nested fields from handler results? 这有可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2215352/

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