Проблема с функцией "свойства" PyAMF, Django и Python - PullRequest
2 голосов
/ 18 февраля 2009

До сих пор я пользовался большим успехом, используя PyAMF для связи между моим интерфейсом Flex и моим Django. Тем не менее, я считаю, что столкнулся с ошибкой. Следующий пример (акцент на слове «пример») демонстрирует (потенциальную) ошибку:

Приложение My 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;
    }
}

Приложение My 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 ]

1 голос
/ 18 февраля 2009

Я только что получил следующий ответ от ведущего разработчика PyAMF. Это определенно ошибка:

Это ошибка в Django адаптер обрабатывает не модели. поля. * свойства.

Если я сделаю:

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.

Я создал билет для этого и будет смотреть на получение патча немного позже.

Приветствия

Ник

ОБНОВЛЕНИЕ : Ник исправил эту ошибку, и она будет выпущена в PyAMF 0.4.1 (которая должна быть выпущена в эти выходные).

0 голосов
/ 18 февраля 2009

Совсем нет.

Как вы думаете, ошибка от Django или от Flex? Вы могли бы прежде всего отследить объект AMF во Flex. Если значение здесь уже 0, внимательно посмотрите, что делает PyAMF.

...