1

J'ai deux modèles:Django cache admin relation m2m

models.py

class City(models.Model): 
    title = models.CharField(max_length=255) 
    show = models.BooleanField(default=True) 

class Company(models.Model) 
    title = models.CharField(max_length=255) 
    cities = models.ManyToManyField(City, null=True, blank = True) 

admin.py

class CompanyAdmin(admin.ModelAdmin): 
    search_fields = ('title',) 
    filter_horizontal = ('cities',) 

Il est d'environ 23000 villes dans la base de données. Lorsque je modifie le détail de la société dans Admin, il charge pour toujours !!! Il suffit d'accéder à admin/myapp/company/12/prend 2-3 minutes - c'est horrible.

Comment puis-je accélérer les choses et mettre en cache le jeu de queries City?

Répondre

0

Vous pouvez utiliser raw_id_fields

class CompanyAdmin(admin.ModelAdmin): 
    raw_id_fields = ("cities",) 
1

23000 est en fait "rien" pour une base de données. D'abord, vous devez identifier le "coupable" d'un ralentissement, la requête est lente. C'est où django-debug-toolbar aiderait beaucoup. Ensuite, vous pouvez exécuter les requêtes manuellement avec EXPLAIN et voir ce qui peut être amélioré - par exemple, l'ajout d'index pourrait aider.

En outre, pensez à utiliser les packages django-cache-machine ou johnny-cache.

Voir aussi:

Questions connexes