2015-04-01 1 views
1

J'ai fait un certain nombre de recherches ici et lu la documentation de ManyToMany pour Django et pense que ce type de modèle correspond à mes besoins. Cependant, étant donné la façon dont ce champ apparaît sur la page d'administration, je crains d'avoir trop de données pour ce type pour fonctionner correctement pour mon but.Django Many to Many Fields - OK avec des jeux de données volumineux?

J'ai deux modèles, Image et Post. Je veux configurer mes modèles de telle sorte qu'une image puisse être associée à un certain nombre de messages et inversement. Mon souci est qu'avec des dizaines/centaines de milliers de messages et d'images, la page d'administration sera ingérable et prendra trop de temps à charger.

Voici ce que j'ai maintenant:

class Image(models.Model): 
 
    post = models.ManyToManyField(Post) 
 
    image = models.ImageField(upload_to=f, blank=True) 
 

 
class Post(models.Model): 
 
    post_title = models.CharField(max_length=113) 
 
    text = models.CharField(max_length=1500) 
 
    pub_date = models.DateTimeField('post date') 
 
    image = models.ManyToManyField(Image)

Y at-il une meilleure façon de gérer cette situation? J'ai pensé à créer une table de base de données séparée avec des clés étrangères pour Image et Post. Chaque association entre une publication et une image aurait une entrée dans cette table. Cela fonctionnerait-il?

Répondre

1

Cela générerait deux colonnes M2M. Vous voulez probablement une colonne M2M:

class Image(models.Model): 
    image = models.ImageField(upload_to=f, blank=True) 

class Post(models.Model): 
    post_title = models.CharField(max_length=113) 
    text = models.CharField(max_length=1500) 
    pub_date = models.DateTimeField('post date') 
    images = models.ManyToManyField(Image) 

Interrogation la relation inverse serait spécifiée avec:

image_instance.post_set.all() 

L'autre partie de la question est une question d'optimisation de DB et détermine quel type de requêtes vous allez courir contre.

Le transfert des données BLOB prendra probablement le temps le plus long, et ce serait le cas s'il était stocké dans une base de données ou un système de fichiers.

+0

Merci. Je suis d'accord que je devrais enlever le M2M sur l'un des modèles. En ce qui concerne l'autre question, est-ce une mauvaise forme de Django d'avoir une table séparée qui stocke toutes les relations entre Post et Image? C'est la direction dans laquelle je me penche, mais je n'ai pas assez d'expérience pour savoir si cela va causer des problèmes sur la route. Selon votre réponse, il semble que ce soit une solution acceptable. Chaque poste aura sa propre page et je ferai une recherche pour les images correspondantes pour ce poste. –

+0

Le django m2m créera cette table pour vous. Aussi, en ajoutant une image à une instance de Post, vous pouvez facilement interroger les images liées en faisant: post_instance.images.all(). Jetez un coup d'œil sur les nombreux exemples de Django: https://docs.djangoproject.com/fr/1.7/topics/db/examples/many_to_many/ – MadMan2064