Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Otimize a consulta django para extrair a chave estrangeira e o relacionamento django-taggit


É possível usar prefetch_related para recuperar as tags, mas você precisa evitar a propriedade 'tags', pois - como o jdi diz - este é um gerenciador personalizado e não uma relação verdadeira. Em vez disso, você pode fazer:

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

Infelizmente, action.tags.all no código do seu modelo não fará uso da pré-busca e acabará fazendo sua própria consulta - então você precisa dar o passo bastante complicado de ignorar o gerenciador de 'tags' também:
{% for tagged_item in action.tagged_items.all %}
    <span>{{ tagged_item.tag }}</span>{% if not forloop.last %}, {% endif %}
{% endfor %}

(Ed.:se você está recebendo "'QuerySet' object has no attribute 'prefetch_related'", isso sugere que você está em uma versão do Django abaixo de 1.4, onde prefetch_related não está disponível.)