2009-02-17 6 views
2

Jusqu'ici, j'ai eu beaucoup de succès en utilisant PyAMF pour communiquer entre mon frontal Flex et mon back-end Django. Cependant, je crois avoir rencontré un bug. L'exemple suivant (l'accent sur le mot "exemple") démontre le (potentiel) bug:Problème avec PyAMF, Django et la fonctionnalité "propriété" de Python

Mon application Flex contient la VO suivante:

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; 
    } 
} 

application Mon Django contient le modèle suivant:

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) 

Lorsque j'essaie de récupérer les objets de livre à afficher dans un DataGrid, les livres s'affichent dans la grille comme prévu. Cependant, "numberOfOddPages" est toujours défini sur 0. J'ai même tenté de définir explicitement cet attribut avec une valeur par défaut ("numberOfOddPages = 100") pour voir si ma méthode "_get_number_of_odd_pages()" contenait une erreur. Malheureusement, il donne le même résultat: la valeur dans la VO reste à 0.

Est-ce que quelqu'un a un aperçu de ce que je peux mal faire?

Répondre

1

Je viens de recevoir la réponse suivante du développeur principal de PyAMF. Il est sans aucun doute un bug.

Ce bogue dans la façon dont l'adaptateur Django gère non models.fields * propriétés.

Si je fais:

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 

Puis-je obtenir les valeurs correctes de 52.

J'ai créé a ticket pour cette et se penchera sur l'obtention d'un patch un peu plus tard .

Cheers,

Nick

MISE À JOUR: Nick a corrigé ce bug et il sera publié dans PyAMF 0.4.1 (qui devrait être publié ce week-end).

-1

Pas du tout.

Pensez-vous que l'erreur provient de Django ou de Flex? Vous pouvez tout d'abord tracer l'objet AMF dans Flex. Si la valeur est déjà 0 alors regardez bien ce que PyAMF fait.

Questions connexes