sql >> Base de Datos >  >> RDS >> Mysql

Optimice la consulta de django para extraer la clave externa y la relación django-taggit

Es posible usar prefetch_related para recuperar las etiquetas, pero debe eludir la propiedad 'etiquetas', ya que, como dice jdi, este es un administrador personalizado en lugar de una relación verdadera. En su lugar, puedes hacer:

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

Desafortunadamente, action.tags.all en el código de su plantilla no hará uso de la captación previa y terminará haciendo su propia consulta, por lo que debe dar el paso bastante complicado de omitir el administrador de "etiquetas" allí también:

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

(Ed.:si obtiene "El objeto 'QuerySet' no tiene el atributo 'prefetch_related'", eso sugiere que está en una versión de Django anterior a 1.4, donde prefetch_related no está disponible).