2009-05-13 7 views
2

私はPyAmfを使ってFlexアプリケーションと通信しています。しかし、私は間違いを続けている。PyAMF/Django - Flexクラスマッピングエラー

マイモデル:

from django.contrib.auth.models import User 

class Talent(User): 
    street = models.CharField(max_length=100) 
    street_nr = models.CharField(max_length=100) 
    postal_code = models.PositiveIntegerField() 
    city = models.CharField(max_length=100) 
    description = models.CharField(max_length=100) 

マイゲートウェイファイル:

from pyamf.remoting.gateway.django import DjangoGateway 
from addestino.bot.services import user 
from addestino.bot.models import * 
from django.contrib.auth.models import User 
import pyamf 

pyamf.register_class(User, 'django.contrib.auth.models.User') 
pyamf.register_class(Talent, 'addestino.bot.models.Talent') 

services = { 
    'user.register': user.register, 
    'user.login': user.login, 
    'user.logout': user.logout, 
} 

gateway = DjangoGateway(services, expose_request=True) 

フレックスタレントオブジェクト:

package be.addestino.battleoftalents.model 
{ 
    [Bindable] 
    public class Investor 
    { 
    public static var ALIAS : String = 'be.addestino.battleoftalents.model.Investor'; 

    public var id:Object; 
    public var street:String; 
    public var street_nr:String; 
    public var postal_code:uint; 
    public var city:String; 
    public var cash:Number; 
    public var date_created:Date; 
    public var date_modified:Date; 
    public var username:String; 
    public var password:String; 
    public var email:String; 

    public function Investor() 
    { 
    }  
} 

}

Flexは私のregister servicemethod(Aを呼び出す場合私はエラー'KeyError: first_name'を取得します。その後、Flex VOにfirst_nameフィールドを追加すると、last_nameというエラーが発生します。等々。 このエラーは、私たちのflex VOがdjangoモデルと全く同じフィールドを持つ必要があることを意味します。単純なオブジェクトでは、これは問題ではありません。しかし、私たちはdjango Userオブジェクトのサブクラスを使用します。これは、投資家が例えばuser_ptrフィールドを必要としていることを意味します。 注:servicemethodの前にすべてのエラーが表示されます。

もっと簡単な方法はありますか?理想的には、私たちが使用するフィールド(Djangoユーザーか、 Userから拡張されたdjango)に関係なく、Flex Investor VOを使用するのが理想的です。しかし、今はFlexオブジェクトをDjangoオブジェクトの後ろに正確にモデル化する必要があります。私はDjango Userオブジェクトがどのように見えるのか正確には分かりません(私はそうではありません)。

私は本当にいくつかの助けを使うことができます。ありがとうございます:-)

答えて

3

これは、IExternalizableインターフェイスを使用して行われます。

それはあなたが明示的にオブジェクトを読み書きすることができます。これがJavaの暗黙のシリアライゼーションに似ていると、デフォルトで送信されるものを制限することはできません。私はPyAMFでこれの例を見つけることができませんでした。

Best post私は見つけました。

1

PyAMF 0.6b2のリリースで、私はついにこの質問に答えることができます。

0.5.1は、Djangoモデルをエンコードするときに継承をどのように処理するかにかなり厳しいものでした。すべてのプロパティが各オブジェクトにエンコードされていることが保証され、要求をデコードする際にすべてのプロパティが利用可能であることが保証されていました。

これが新しいバージョンのリリースで変更されました。 PyAMFは多くの場合、Flexから手を差し伸べることについてもっと寛容です。KeyErrorエラーが発生しないようにする必要があります(そうした場合、バグと見なされます)。