Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/348.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活塞:如何从处理程序结果中排除嵌套字段?有可能吗?_Python_Django_Django Models_Django Piston - Fatal编程技术网

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

Python Django活塞:如何从处理程序结果中排除嵌套字段?有可能吗?,python,django,django-models,django-piston,Python,Django,Django Models,Django Piston,我正在对我为使用Django活塞的Django应用程序编写的API进行最后的润色。API能够按请求或IP地址进行搜索,它们分别是request或IPAddress实例。每个请求可以有一个或多个与其关联的IPAddress 例如,我有一个API调用,它将显示与“活动”、“非活动”或“全部”活动状态相匹配的所有IPAddress对象。与每个IPAddress实例关联的请求可作为IPAddress.Request使用 我遇到的问题是请求。Inputer是提供请求的人的用户实例的外键。当从为该API调用

我正在对我为使用Django活塞的Django应用程序编写的API进行最后的润色。API能够按请求或IP地址进行搜索,它们分别是
request
IPAddress
实例。每个请求可以有一个或多个与其关联的
IPAddress

例如,我有一个API调用,它将显示与“活动”、“非活动”或“全部”活动状态相匹配的所有
IPAddress
对象。与每个
IPAddress
实例关联的
请求
可作为
IPAddress.Request
使用

我遇到的问题是
请求。Inputer
是提供请求的人的
用户
实例的外键。当从为该API调用创建的处理程序返回结果时,将显示
用户
实例中的所有字段,包括
密码

这是不好的;我不要这个

这是我的处理程序:

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>
其结果是:

<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>

我认为我误解或误用了在这种情况下进行字段排除的方式,因此非常感谢对这个主题的任何启示。

您能尝试使用include而不是exclude吗?例如

include = (('request', ('inputter', ('username', 'therestofthefields'))))
我不记得我写的
exclude
是否像
include
一样通用


此外,django活塞谷歌小组是我们讨论最多事情的地方,在那里你可能会更成功地提出这个问题。

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

来自外键的模型字段可以如下指定:

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


谢谢你打电话进来,杰斯珀。我会把这个复制到邮件列表上。这确实有效。谢谢你的回复!比我所希望的更乏味(特别是当我不得不在多个处理程序之间复制这个时),但解决方案就是解决方案!
include = (('request', ('inputter', ('username', 'therestofthefields'))))
('foreign_model_field', ('nested_field1', 'nested_field2'))
fields = ('updated', 'expires', 'created', 
    ('request', ('incident', 'reason', ('inputter', ('username',)))))