Mysql
 sql >> Base de données >  >> RDS >> Mysql

Optimiser la requête django pour extraire la clé étrangère et la relation django-taggit

Il est possible d'utiliser prefetch_related pour récupérer les balises, mais vous devez contourner la propriété 'tags', car - comme le dit jdi - il s'agit d'un gestionnaire personnalisé plutôt que d'une véritable relation. Au lieu de cela, vous pouvez faire :

actions = Action.objects.select_related('reoccurance').filter(complete=False)\ .prefetch_related('tagged_items__tag')

Malheureusement, action.tags.all dans votre code de modèle n'utilisera pas le préchargement et finira par faire sa propre requête - vous devez donc prendre l'étape plutôt hacky de contourner le gestionnaire de 'tags' là aussi :

{% for tagged_item in action.tagged_items.all %}
    <span>{{ tagged_item.tag }}</span>{% if not forloop.last %}, {% endif %}
{% endfor %}

(Ndlr :si vous obtenez "l'objet 'QuerySet' n'a pas d'attribut 'prefetch_related'", cela suggère que vous êtes sur une version de Django inférieure à 1.4, où prefetch_related n'est pas disponible.)