2012-02-10 3 views
1

Web2py possède plusieurs méthodes pour les champs calculés, mais la documentation indique que les champs paresseux "ne sont pas visualisés par défaut dans les tables" car ils ne sont pas fournis avec des attributs comme _. En fait, ils ne semblent pas pouvoir être disponibles dans SQLFORM.grid même si le champ est demandé. J'obtiens l'erreurChamps calculés dans web2py sqlgrid

AttributeError: 'FieldLazy' object has no attribute 'readable' 

Lorsque j'inclue un champ paresseux dans la liste des champs.

db.mytable.myfield = Field.Lazy(lambda row: "calc") 
  • Puis-je mettre un champ paresseux dans une grille?
  • Quelle est la méthode recommandée pour afficher une grille contenant des champs calculés.

Répondre

4

Malheureusement, je ne pense pas qu'il existe un moyen facile d'afficher les champs virtuels dans SQLFORM.grid. Ce que vous pouvez faire est d'utiliser l'argument "links" et d'ajouter chaque champ virtuel en tant que lien (si "links" est un dictionnaire, chaque élément deviendra une colonne séparée dans la grille).

links=[dict(header='myfield', body=lambda row: row.myfield)] 

note, dans ce cas, vous ne pouvez pas spécifier l'argument des « champs » (c.-à-vous ne pouvez pas spécifier un sous-ensemble des champs pour l'inclusion dans la grille) - cela est parce que la fonction de champ virtuel a besoin de tous les champs afin de travailler. Si vous avez besoin de masquer certains champs, vous pouvez définir leur attribut "lisible" sur False.

Une autre option peut être computed fields.

+0

Merci pour l'info Anthony. La possibilité d'utiliser des champs calculés en tant que champs en lecture seule est une omission curieuse pour le .grid. Je me demande si le fait d'ajouter simplement les attributs à l'objet de champ calculé rendrait l'objet utilisable ou s'il est plus compliqué. –

+0

+1 pour l'indicateur d'attribut lisible. Je voulais reformater un champ sans doublons, et c'est la solution. –