J'utilise le bit de code suivant dans mon application Django:NULL Traiter comme '0' dans le modèle Django
pictures = gallery.picture_set.annotate(score=models.Sum('picturevote__value')).order_by('-score')
Il y a une table de galeries. Dans chacun d'eux sont des images. Lorsqu'un utilisateur vote en haut ou en bas d'une image, une nouvelle ligne dans «picturevote» est insérée et connectée à l'image. Ensuite, je peux obtenir le score total pour les images. Maintenant, je veux commander les photos d'une galerie par leurs valeurs de score. Mais en raison des jointures de la table, il peut y avoir la valeur NULL pour le score quand il n'y a pas de votes du tout. Néanmoins, un score de 'NULL' doit être traité comme '0'.
Des idées?
modifier: Ok, voici quelques explications supplémentaires: Le problème est que l'agrégation dans l'exemple ci-dessus définit score
à NULL. Quand je veux afficher le score que j'utilise quelque chose comme ceci:
score = self.picturevote_set.aggregate(models.Sum('value'))[ 'value__sum' ] or 0
Ensuite, l'agrégation conduit soit à NULL (s'il n'y a pas de lignes picturevote) ou une certaine valeur. Si elle est NULL, l'expression-or la convertit en une valeur entière affichable. Mais cela ne résout que les problèmes d'affichage causés par la valeur NULL. Lorsque je veux trier les images par cette valeur score
comme dans le premier exemple de code, toutes les entrées avec NULL sont placées à la fin du jeu de résultats ordonné. D'abord il y a des images avec des scores positifs, puis il y a les images avec des valeurs négatives et ALORS il y a les images qui n'ont pas été votées vers le haut ou le bas jusqu'ici, parce qu'elles ont la valeur score
.
Ma question est de savoir comment ce comportement peut être modifié afin que la commande soit correcte.
Pouvez-vous indiquer plus clairement quel est le problème?Avez-vous une erreur du code ci-dessus s'il n'y a pas de votes? Quelle est l'erreur? –