如何在Django/PyAMF和Flex之间映射字段名?

如何在Django/PyAMF和Flex之间映射字段名?,django,apache-flex,overriding,field,pyamf,Django,Apache Flex,Overriding,Field,Pyamf,例如,使用my UserProfile模型: class UserProfile(models.Model): user = models.ForeignKey( User, unique=True ) blurb = models.CharField( max_length=200, null=True, blank=True ) public = models.BooleanField( default=True ) ... 因此,我最终得到了一个名

例如,使用my UserProfile模型:

class UserProfile(models.Model):
  user      = models.ForeignKey( User, unique=True )
  blurb     = models.CharField( max_length=200, null=True, blank=True )
  public    = models.BooleanField( default=True )
  ...
因此,我最终得到了一个名为“public”的字段。这不会在ActionScript中摇摆,因为它是一个关键字。更改很烦人,因为它在django概要文件包中被烘焙成几个功能层。因此,我不得不在Flex端对其进行重命名:

[RemoteClass(alias="...")]
[Bindable]
public class UserProfile
{
    public function UserProfile()
    {
    }
    public var id:int;
    public var blurb:String;
    public var _public:Boolean;
    ...
在事务的任何一方,我可以在哪里声明“远程字段公共转换为本地字段公共”?我在PyAMF端使用了一些类别名,但很快就变得很混乱,而且没有关于如何很好地实现这一点的文档。Flex端的文档似乎表明有一个我可以覆盖的“处理传入请求”处理程序,但我认为这是在已经填充com对象中的字段之后发生的,因此将它们放在地板上,因为没有相应的字段,给我留下了一堆:

ReferenceError: Error #1056: Cannot create property

在Flex跟踪中…

为了支持这一点,PyAMF需要在字段之间提供同义词映射。在那之前,您可以使用(尽管笨拙):

使用相应的Flex代码:

[RemoteClass(alias="...")]
[Bindable]
public class UserProfile implements IExternalizable
{
  public function UserProfile()
  {
  }
  public var id:int;
  public var blurb:String;
  public var _public:Boolean;

  public function writeExternal(output:IDataOutput)
  {
    output.writeObject(id);
    output.writeObject(blurb);
    output.writeObject(_public);
  }

  public function readExternal(input:IDataInput)
  {
    id = input.readObject();
    blurb = input.readObject();
    _public = input.readObject();
  }
}
注意我没有测试上面的代码,但原则上应该可以工作


顺便说一句,你能更详细地解释一下这本书让人困惑的地方吗?我希望对新用户尽可能清楚地说明这一点。

为了支持这一点,PyAMF需要在字段之间提供同义词映射。在那之前,您可以使用(尽管笨拙):

使用相应的Flex代码:

[RemoteClass(alias="...")]
[Bindable]
public class UserProfile implements IExternalizable
{
  public function UserProfile()
  {
  }
  public var id:int;
  public var blurb:String;
  public var _public:Boolean;

  public function writeExternal(output:IDataOutput)
  {
    output.writeObject(id);
    output.writeObject(blurb);
    output.writeObject(_public);
  }

  public function readExternal(input:IDataInput)
  {
    id = input.readObject();
    blurb = input.readObject();
    _public = input.readObject();
  }
}
注意我没有测试上面的代码,但原则上应该可以工作


顺便说一句,你能更详细地解释一下这本书让人困惑的地方吗?我很想向新用户尽可能清楚地说明这一点。

太棒了,非常感谢,我相信这会奏效,我很快就会试用。公平地说,我确实在某个地方看到过这样的东西,我只是希望能有更明确的东西为我写这篇文章,这样我以后就不用继续写了。不过,我想我可以为此编写包装,并将其发布给其他人使用。:-)为了回答你的要求,我想说,在你所指的文档链接中,把你上面写的东西作为一个例子会有所帮助——我不得不在其他地方挖掘,以获得与上面类似的东西。而且,上面的内容对我来说有点像黑客,或者说是遮遮掩掩。这并不能让我相信它不会在其他地方破坏什么东西。而一个将一个字段映射到另一个字段的特定api则可以。然而,这正是我从输入如此多的双下划线内容(包括硬编码的有序信息)中得到的感觉。(感觉像是手动打包tcp或其他东西:-)如果对classalias接口有更多的解释也会很好。在阅读了文档之后,我真的不确定它是做什么的,或者如何使用它。ClassAlias是PyAMF的一个内部类,用于处理[class]提供的元数据。上面的答案确实是一个黑客,我已经创建了一个提供所述同义词功能的票据。看到很好,谢谢!我很高兴看到有人借此机会将解决方案重新应用到产品中!与上述内容相关:太棒了,非常感谢,我相信这会奏效,我会很快试用。公平地说,我确实在某个地方看到过这样的东西,我只是希望能有更明确的东西为我写这篇文章,这样我以后就不用继续写了。不过,我想我可以为此编写包装,并将其发布给其他人使用。:-)为了回答你的要求,我想说,在你所指的文档链接中,把你上面写的东西作为一个例子会有所帮助——我不得不在其他地方挖掘,以获得与上面类似的东西。而且,上面的内容对我来说有点像黑客,或者说是遮遮掩掩。这并不能让我相信它不会在其他地方破坏什么东西。而一个将一个字段映射到另一个字段的特定api则可以。然而,这正是我从输入如此多的双下划线内容(包括硬编码的有序信息)中得到的感觉。(感觉像是手动打包tcp或其他东西:-)如果对classalias接口有更多的解释也会很好。在阅读了文档之后,我真的不确定它是做什么的,或者如何使用它。ClassAlias是PyAMF的一个内部类,用于处理[class]提供的元数据。上面的答案确实是一个黑客,我已经创建了一个提供所述同义词功能的票据。看到很好,谢谢!我很高兴看到有人借此机会将解决方案重新应用到产品中!与上述有关: