PyAMF,Django和Python的“属性”功能问题

时间:2009-02-17 22:05:10

标签: python django flex flex3 pyamf

到目前为止,我使用PyAMF在我的Flex前端和我的Django后端之间进行通信取得了很大的成功。但是,我相信我遇到了一个错误。以下示例(强调“示例”一词)演示了(潜在)错误:

我的Flex应用包含以下VO:

package myproject.model.vo
{
    [Bindable]
    [RemoteClass(alias="myproject.models.Book")]

    public class BookVO
    {
        public var id:int;
        public var title:String;
        public var numberOfOddPages:int;
    }
}

我的Django应用程序包含以下模型:

class Book(models.Models):
    title = models.CharField(max_length=20)

    def _get_number_of_odd_pages(self):
        #some code that calculates odd pages
       return odd_page_total

    numberOfOddPages = property(_get_number_of_odd_pages)

当我尝试检索要在DataGrid中显示的图书对象时,图书会按预期显示在网格中。但是,“numberOfOddPages”始终设置为0.我甚至尝试使用默认值(即“numberOfOddPages = 100”)显式设置此属性,以查看我的“_get_number_of_odd_pages()”方法是否有错误。不幸的是,它产生了相同的结果:VO中的值保持为0。

有没有人对我可能做错了什么有任何见解?

2 个答案:

答案 0 :(得分:1)

我刚收到PyAMF首席开发人员的以下回复。这绝对是一个错误:

  

这是Django的一个错误   适配器处理非models.fields。*   属性。

     

如果我这样做:

import pyamf

class Book(object):    
def _get_number_of_odd_pages(self):
  return 52

numberOfOddPages = property(_get_number_of_odd_pages)

pyamf.register_class(Book, 'Book')

encoded = pyamf.encode(Book()).getvalue() 
print pyamf.decode(encoded).next().numberOfOddPages
  

然后我得到52的正确值。

     

我为此创建了a ticket   并将考虑获得一个补丁   不久之后。

     

干杯,

     

尼克

更新:Nick修复了这个错误,它将在PyAMF 0.4.1中发布(应该在本周末发布)。

答案 1 :(得分:-1)

完全没有。

您认为错误来自Django还是来自Flex?您首先可以在Flex中跟踪AMF对象。如果值已经全部为0,那么请好好了解PyAMF的作用。