sql >> Databáze >  >> RDS >> Mysql

Optimalizujte dotaz django tak, aby vytáhl cizí klíč a vztah django-taggit

Je možné použít prefetch_related k načtení značek, ale musíte obejít vlastnost 'tags', protože - jak říká jdi - jde spíše o vlastní správce než o skutečný vztah. Místo toho můžete:

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

Bohužel action.tags.all v kódu vaší šablony nevyužije předběžné načtení a skončí tím, že provede svůj vlastní dotaz – takže musíte udělat poměrně ošemetný krok a obejít správce „tagů“ i zde:

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

(Ed.:Pokud získáváte objekt „'QuerySet“ nemá atribut 'prefetch_related'“, znamená to, že používáte verzi Django nižší než 1.4, kde prefetch_related není k dispozici.)



  1. STRING_SPLIT() v SQL Server 2016:Následná akce #1

  2. Vnitřní spojení 2 tabulek se stejnými názvy sloupců

  3. ClusterControl - Pokročilá správa zálohování - PostgreSQL

  4. Je možné spustit řetězec v MySQL?