我正在对我为使用django活塞的django应用程序编写的API进行最后的润色。API能够按请求或IP地址进行搜索,这些地址是
   
    Request
   
   或
   
    IPAddress
   
   实例。每个请求可以有一个或多个
   
    IP地址
   
   与之相关。
  
  
   例如,我有一个API调用,它将显示
   
    IP地址
   
   与活动状态“活动”、“非活动”或“全部”匹配的对象(用于两者之一)。这个
   
    请求
   
   每一个
   
    IP地址
   
   实例关联可用为
   
    IPAddress.request
   
   .
  
  
   我的问题是
   
    Request.inputter
   
   是
   
    User
   
   提供请求的人的实例。当从为此API调用创建的处理程序返回结果时,来自
   
    用户
   
   显示实例,包括
   
    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', ) ) ) ) 
  
   我认为我误解或误用了在这种情况下排除外场的方式,因此非常感谢对这一主题的任何启示。