2009-11-15 5 views
1

Je construis une application django qui a une galerie d'images, et le client insiste pour que les images soient affichées dans un ordre spécifique. J'utiliser l'interface d'administration pour télécharger les images et modifier leurs propriétés, et j'ai une classe ImageFile dans mon modèle qui ressemble fondamentalement à ceci:Comment forcer l'ordre des images dans une galerie

class ImageFile(models.Model): 
    """represents an image file""" 

    # the image description 
    description = models.CharField(max_length=45) 

    # the actual image 
    image = models.ImageFile(upload_to='images') 

    # running number representing the order on the page 
    order = models.IntegerField() 

    def __unicode__(self): 
      return "%s" % (self.description) 

    class Meta: 
     db_table = 'images' 

J'utilise le IntegerField « pour » avoir un numéro en cours d'exécution qui contrôlera le tri. Je me suis dit qu'il devait y avoir une façon plus intelligente et plus efficace de le faire (un autre modèle?) Et de pouvoir facilement le contrôler via l'interface d'administration.

Répondre

1

Je suppose que vous souhaitez donner la possibilité de trier les images à l'utilisateur, (de toute façon si vous voulez le trier par le temps ajouter, mieux, il est ordonné par ID), donc, s'il existe un modèle vous devez stocker un tuple d'identifiants d'images de la galerie (dans DB en tant qu'objet texte). Après avoir lu le jeter à tuple, et vous avez prévu l'ordre. J'espère aider.

+0

C'est probablement la meilleure idée, sauf que vous pourriez mieux stocker les informations de commande dans un format de données sérialisé tel que JSON ou Pickle. – jathanism

0

Si l'ordre des images est l'ordre dans lequel elles sont téléchargées, vous pouvez utiliser un horodatage pour les commander.

0

J'ai utilisé la même méthode (avec le champ entier "order" dans le modèle) pour définir la commande. Cependant, j'ai personnalisé l'admin pour permettre le glisser-déposer des images appartenant à un album pour définir l'ordre. Lorsque l'administrateur clique sur le bouton "Enregistrer", la commande sera calculée automatiquement en fonction de la commande en cours après un glisser-déposer. Toutes les données seront envoyées au serveur pour enregistrement dans DB.

Questions connexes