2

PyAmfを使用して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)

Flex Talentオブジェクト:

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()
    {
    }      
}

}

registerFlexが私のservicemethod(flex InvestorをPythonに送信するメソッド)を呼び出すと、エラーが発生します'KeyError: first_name'first_name次に、Flex VOにフィールドを追加すると、last_nameエラーが発生します。等々。このエラーは、flexVOがdjangoモデルとまったく同じフィールドを持っている必要があることを意味します。単純なオブジェクトの場合、これは問題にはなりません。ただし、djangoUserオブジェクトのサブクラスを使用します。つまり、user_ptrたとえば、投資家にもフィールドが必要です。注:servicemethodの前にすべてのエラーが発生します。

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

私は本当にいくつかの助けを使うことができました。よろしくお願いします:-)

4

2 に答える 2

1

PyAMF 0.6b2 のリリースにより、ようやくこの質問に答えることができます。

0.5.1 では、Django モデルのエンコードに関して、継承の処理方法がかなり厳密でした。すべてのプロパティが各オブジェクトでエンコードされることが保証され、リクエストをデコードするときにすべてのプロパティが利用可能であることが期待されていました。

これはひどいもので、新しいバージョンのリリースで動作が変更されました。PyAMF は Flex から渡されたものに対してより寛容です。もうエラーは発生しませんKeyError(エラーが発生した場合は、バグと見なされます)。

于 2010-08-12T23:55:34.360 に答える