2010-06-01 3 views
1

:Django/PyAMF와 Flex간에 필드 이름을 어떻게 매핑 할 수 있습니까? 내 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) 
    ... 

따라서, 나는 "공개"라는 필드와 끝까지. 이것은 키워드이기 때문에 ActionScript에서 jive하지 않습니다. django-profile 패키지의 여러 기능 레이어로 구워지기 때문에 변경하는 것이 귀찮습니다. 그래서, 나는 플렉스 측에서 이름을 변경하도록 강요하고 있습니다 : 트랜잭션의 양쪽에, 내가 언급 할 수

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

"원격 필드 대중은 지역 현장 _public로 변환"? 나는 PyAMF 측에서 ClassAliases를 약간 엉망으로 만들었지 만, 빠르게 지저분 해졌으며, 이것을 잘 수행하는 방법에 대한 문서는 없다. 그리고 플렉스 사이드에있는 문서는 "들어오는 요청을 처리하는"처리기가 ​​있음을 나타낼 수 있다고 생각합니다. 그러나 com 객체의 필드를 이미 채운 후에 발생하므로 적절하다고 생각하기 때문에 바닥에 놓습니다. 필드가없는, 그리고 무리와 함께 나를 떠나 :이 기능을 지원하기 위해 플렉스 추적에

ReferenceError: Error #1056: Cannot create property 

...

답변

1

는 PyAMF는 필드 사이의 동의어 매핑을 제공해야합니다.

[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(); 
    } 
} 

주 내가 위의 코드를 테스트하지 않은,하지만 원칙적으로 작동합니다 : 해당 플렉스 코드로

class UserProfile(model.Model): 
    user  = models.ForeignKey(User, unique=True) 
    blurb  = models.CharField(max_length=200, null=True, blank=True) 
    public = models.BooleanField(default=True) 

    class __amf__: 
    external = True 

    def __writeamf__(self, output): 
    output.writeObject(self.id) 
    output.writeObject(self.blurb) 
    output.writeObject(self.public) 

    def __readamf__(self, input): 
    self.id = input.readObject() 
    self.blurb = input.readObject() 
    self.public = input.readObject() 

을 : 그 때까지, 당신은 IExternalizable (서투르게 있지만) 사용할 수 있습니다. Btw은

, 당신은 documentation에 대해 혼란이 있었는지에 대해 더 자세히로 갈 수 있나요? 나는 새로운 사용자들에게 분명하게 그것을 가능하게하고 싶다.

+0

멋진, 난이 일을해야 확신합니다, 당신에게 너무 감사합니다, 나는 곧 그것을 밖으로 시도 할 것이다. 공평하게 말하면, 나는이 효과가 어딘가에서 쓰여지는 것을 보았고, 나는 이것을 위해 쓸만한 것이 더 명확 할 것이기를 바랬다. 그래서 앞으로도 그렇게 할 필요가 없을 것이다. 그러나, 나는 이것을 위해 래퍼를 작성하고 다른 사람들이 사용할 수 있도록 게시 할 수 있다고 생각합니다. :-) 귀하의 요청에 응답하기 위해, 나는 당신이 가리키는 문서 링크의 예로서 위의 쓴 제공하는 것은 도움이 할 것을 말하고 싶지만 - 내가 위의 비슷한을 얻기 위해 다른 곳에서 발굴했다. – eruciform

+0

또한 위의 내용은 약간의 해킹이나 후드 아래에있는 맛이 있습니다. 그것은 다른 곳의 무언가를 깨뜨리지 않을 것이라는 확신을주지 않습니다. 한 필드를 다른 필드로 매핑하는 특정 API는 마찬가지입니다. 그러나 이것은 하드 코딩 된 주문 정보가 포함 된 여러 가지 __ 배수가 아닌 __ 가지를 입력했을 때의 느낌입니다. 합니다 (classalias 인터페이스에 대한 설명을 더이 있다면 그것도 좋은 것 :-) 손이나 무언가에 의해 TCP 포장 것 같은 느낌이 든다. 나는 그것이 무엇을하는지, 문서를 읽은 후에, 또는 그것을 어떻게 사용하는지에 대해 정말로 확신하지 못한다. – eruciform

+0

ClassAlias는 [class] .__ amf__에서 제공하는 메타 데이터를 처리하는 데 사용되는 PyAMF의 내부 클래스입니다. 위의 대답은 실제로 해킹이며 설명 된 동의어 기능을 제공하는 티켓을 만들었습니다. http://dev.pyamf.org/ticket/779 – njoyce

관련 문제