Django-fr

Forum

#1 21-08-2012 14:55:25

tonio
Membre
Inscription : 21-08-2012
Messages : 2

Portable binary field type

Bonjour à tous,

je me retrouve dans une situation ennuyeuse et j'aurais besoin de vos lumières. Je développe un logiciel libre orienté messagerie (http://modoboa.org) et parmi les plugins que je propose, il y un frontend pour Amavis (http://www.amavis.org). Ce dernier est un content filter et utilise une base de données pour stocker différentes choses. En fonction du SGBD utilisé (mysql ou postgresql), le schéma de base utilise des types différents, notamment pour les types binaires.

Mon problème concerne le type *bytea* de postgres. Je n'avais jamais eu l'occasion de tester mon frontend avec postgres et je découvre avec horreur qu'il ne fonctionne pas. Lors de l'introspection initiale réalisée par django, les types binaires ont été traduits en CharField, cela fonctionne avec mysql mais pas avec postgres. Le type d'erreur que je rencontre est le suivant :

Caught DatabaseError while rendering: operator does not exist: bytea ~ unknown
LINE 1: ... WHERE ("msgrcpt"."rs" = 'p'  AND "maddr"."email" ~ '(jojo-w...

Après recherche, j'ai vu que django ne supportait pas ce type mais qu'il était prévu d'implémenter un type binaire portable... un jour.

Est ce que quelqu'un aurait déjà rencontré ce type problème? Savez vous pour quelle version de django ce dév. serait prévu?

Merci d'avance  pour votre aide smile

Hors ligne

#2 23-08-2012 15:03:02

David Thenon
Membre
Inscription : 11-08-2010
Messages : 156
Site Web

Re : Portable binary field type

Salut,

Tu n'a pas beaucoup de succès avec ta question.. Alors de ce que j'ai cherché,
l'implémentation du modelfield dans Django c'est pas pour tout de suite, la
feature a du mal à avancer.

Bref la seule solution qui semble viable pour toi ça semble être
http://django-orm.readthedocs.org/en/latest/orm-pg-bytea-field.html

Par contre c'est juste pour stocker, à priori ce n'est pas possible de
l'utiliser dans les requêtes de séléction.

My 2 cents.

Hors ligne

#3 04-09-2012 21:25:55

tonio
Membre
Inscription : 21-08-2012
Messages : 2

Re : Portable binary field type

Salut,

merci pour ta réponse. J'avais effectivement découvert l'existence de ce module mais comme tu le précises, impossible de faire des requêtes de lecture avec... ce qui est justement ce dont j'ai besoin big_smile

J'ai un peu avancé sur le sujet mais la correction est délicate et *sale* : postgres propose une fonction *convert_from* (http://www.postgresql.org/docs/9.1/stat … tring.html) qui permet de transformer le contenu d'un bytea vers une chaine de caractères. Cela combiné avec un test pour connaitre le sgbd utilisé, il devient possible de s'en sortir... provisoirement tongue

Bref, je vais implémenter cette solution dans un 1er temps (afin de débloquer la situation) et réfléchir à qq chose de plus stable pour le futur. D'ici là, peut-être que ce fameux modelfield aura vu le jour...

Hors ligne

#4 04-09-2012 23:24:10

ksamuel
Modérateur
Inscription : 22-06-2012
Messages : 40
Site Web

Re : Portable binary field type

Nope, pas possible à ce que je sache. Tous ceux que je connais qui ont essayé ont fait ça avec du SQL à la mano, ce qu'heureusement l'ORM django permet de faire.

Hors ligne

Pied de page des forums