2011-12-26 5 views
0

Je souhaite avoir un modèle dans Django auquel plusieurs images sont associées. J'évalue les options possibles.Champ non-modèle dans le modèle Django

Une image pour un modèle est facilement réalisée avec le models.ImageField(...).

Cependant, je voudrais un tableau (ou un ensemble) d'images. Cela peut être juste des chemins, pas nécessairement des objets ImageField.

Le problème est, comment puis-je créer ce champ dans un modèle Django? Je suppose que je vais devoir créer un champ qui ne fait pas partie de models.WhateverField. Est-ce possible? Puis-je définir un champ non-modèle, tels que:

class MyModel: 
    name = models.CharField(max_length=10) 
    picture_list = [] 

puis faire:

def sample_add_picture_view(request): 
    picture = "sample.jpg" 

    model = MyModel.objects.get(id=sample_id) 
    model.picture_list.append(picture) 
    model.save() 

    return HttpResponseRedirect('index.html') 

pourrait-il être fait? Si non, quelle pourrait être une meilleure solution? Je vous remercie !

Répondre

4

Vous devez créer deux modèles distincts et de les relier avec un champ ForeignKey, comme ceci:

class Item(models.Model): 
    name = models.CharField(max_length=255) 

class ItemImage(models.Model): 
    image = models.ImageField(upload_to="item_images") 
    item = models.ForeignKey('Item', related_name="images") 

Il est possible de faire un champ personnalisé pour stocker plusieurs éléments, mais il est une très mauvaise idée. Vous devez sérialiser un tableau dans la base de données, ce qui rend la maintenance très difficile. L'utilisation d'un modèle séparé signifie que vous pouvez stocker des informations supplémentaires telles que les temps de téléchargement, les légendes d'images, etc. avec un minimum d'effort.

Questions connexes