sql >> Database >  >> RDS >> Mysql

Optimaliseer de django-query om de externe sleutel en de django-taggit-relatie op te halen

Het is mogelijk om prefetch_related . te gebruiken om de tags op te halen, maar je moet de eigenschap 'tags' omzeilen, aangezien - zoals jdi zegt - dit een aangepaste manager is in plaats van een echte relatie. In plaats daarvan kunt u het volgende doen:

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

Helaas, action.tags.all in uw sjablooncode zal geen gebruik maken van de prefetch, en zal uiteindelijk zijn eigen query uitvoeren - dus u moet de nogal omslachtige stap nemen om ook daar de 'tags'-manager te omzeilen:

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

(Red.:als u "'QuerySet' object has no attribuut 'prefetch_related'" krijgt, suggereert dit dat u een versie van Django onder 1.4 gebruikt, waar prefetch_related niet beschikbaar is.)



  1. Fix Msg 8114 "Fout bij het converteren van gegevenstype varchar naar numeriek" in SQL Server

  2. Een externe sleutel toevoegen aan een bestaande tabel in SQLite

  3. Referentie:wat is een perfect codevoorbeeld met de MySQL-extensie?

  4. SQLite - Gegevens exporteren naar een CSV-bestand