2010-05-21 3 views
1

Dans mon admin Django, lorsque j'essaie d'afficher/modifier des objets d'une classe de modèle particulière, l'utilisation de la mémoire et le processeur montent et je dois redémarrer le serveur. Je peux bien voir la liste des objets, mais le problème vient quand je clique sur l'un des objets. D'autres modèles sont bien. Travailler avec l'objet dans le code (c'est-à-dire créer et afficher) est correct, le problème ne se pose que lorsque j'essaie d'afficher un objet avec l'interface d'administration. La classe n'est même pas particulièrement exotique:L'administrateur Django provoque une charge élevée pour un modèle

class Comment(models.Model): 
    user = models.ForeignKey(User) 
    thing = models.ForeignKey(Thing) 
    date = models.DateTimeField(auto_now_add=True) 
    content = models.TextField(blank=True, null=True) 
    approved = models.BooleanField(default=True) 

    class Meta: 
     ordering = ['-date'] 

Des idées? Je suis perplexe. La seule raison pour laquelle je pourrais penser pourrait être que le thing est un objet assez volumineux (quelques kb), mais si je comprends bien, il ne serait pas chargé tant que cela ne serait pas nécessaire (correct?).

+0

Quelle est votre définition d'administrateur? Comment vous inscrivez-vous 'Comment' avec l'administrateur? –

+0

Juste 'admin.site.register (Comment)' – Joe

Répondre

5

La taille de l'objet Thing n'est pas vraiment importante, mais plutôt le nombre de vos objets dans votre base de données. En effet, pour un ForeignKey, l'administrateur de Django vous donne par défaut une liste déroulante contenant tous les éléments existants. Si vous avez beaucoup, Django les chargera tous afin de remplir cette liste. La même chose est vraie ici de l'utilisateur. La meilleure solution consiste à ajouter le champ incriminé au raw_id_fields dans votre sous-classe ModelAdmin. Cela va changer la représentation à un champ de texte simple pour l'ID, avec une fenêtre de recherche pop-up.

+1

Oui, c'est très certainement, merci. Il y a environ 200 000 choses, ce qui représente environ 199 950 de plus que ce que vous voulez dans un