Mysql
 sql >> Database >  >> RDS >> Mysql

Ottimizza la query django per estrarre la chiave esterna e la relazione django-taggit

È possibile utilizzare prefetch_related per recuperare i tag, ma devi aggirare la proprietà 'tags', poiché - come dice jdi - questo è un gestore personalizzato piuttosto che una vera relazione. Invece, puoi fare:

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

Sfortunatamente, action.tags.all nel tuo modello il codice non utilizzerà il prefetch e finirà per eseguire la propria query, quindi è necessario eseguire il passaggio piuttosto complicato di aggirare anche il gestore dei "tag":

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

(Ed.:se stai ricevendo "'QuerySet' object has no attributo 'prefetch_related'", ciò suggerisce che sei su una versione di Django inferiore alla 1.4, dove prefetch_related non è disponibile.)