2009-07-13 6 views
4

J'essaie de mettre l'infini dans un FloatField, mais cela ne semble pas fonctionner. Comment puis-je résoudre ceci?Comment mettre infinity et moins l'infini dans Django FloatField?

f = DjangoModel(float_value=float('inf')) #ok 
f.save() #crashes 

Résultats dans:

Traceback (most recent call last): 
... 
ProgrammingError: column "inf" does not exist 
LINE 1: ... "float_value") VALUES (inf) 

J'utilise Django 1.0.2 avec PostgreSQL 8.3

Répondre

3

Il semble que Djangos ORM n'ait pas de traitement spécial pour cela. Les représentations de Python des valeurs sont inf et -inf, alors que PostgrSQL veut 'Infinity' et '-Infinity'. Évidemment, Djangos ORM ne gère pas cette conversion.

Vous devez donc corriger l'ORM, je suppose. Et puis pensez au fait que d'autres bases de données SQL peuvent très bien vouloir d'autres formats, ou ne gèreront pas du tout les infinis.

+0

Je pense que je vais utiliser 1e100 comme infini ... "fermer" assez, non? :) –

+0

Cela devrait fonctionner correctement. :) –

0

Il devrait être 'l'infini' devrait-il pas? Cependant, je ne sais pas si cela peut être stocké dans un champ flottant. float ('infinity') renvoie inf, et ce serait un champ char.

Editer: Malheureusement, il est difficile de dire ce que la bibliothèque C Django utilise sans creuser profondément. Je dirais comprendre quelle est la valeur stockée dans le champ float, ou au moins déterminer ce qui est retourné. Si c'est bien "inf", alors cela ne peut pas être stocké correctement dans un champ flottant.

+0

float ('inf') et float ('infinity') sont les mêmes, mais ce n'est pas la chaîne 'inf' ou 'infinity' ... –

+0

Jetez un oeil à ceci: http: //code.djangoproject .com/ticket/4287 Il a deux ans, mais je suppose que c'est un problème avec PostgreSQL lui-même. – AlbertoPL

+0

Ok, essayez de voir si un DecimalField le gère correctement. – AlbertoPL

Questions connexes