Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Zoptymalizuj zapytanie django, aby pobrać klucz obcy i relację django-taggit

Możliwe jest użycie prefetch_related aby pobrać tagi, ale musisz obejść właściwość 'tags', ponieważ - jak mówi jdi - jest to niestandardowy menedżer, a nie prawdziwa relacja. Zamiast tego możesz:

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

Niestety, action.tags.all w kodzie szablonu nie użyje pobierania z wyprzedzeniem i zakończy się wykonaniem własnego zapytania - więc musisz wykonać dość chytry krok ominięcia menedżera „tagów” ​​również tam:

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

(Wyd.:jeśli otrzymujesz obiekt "'QuerySet' nie ma atrybutu 'prefetch_related'", co sugeruje, że korzystasz z wersji Django poniżej 1.4, gdzie prefetch_related nie jest dostępna.)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak rozwiązywać problemy z definicjami MySQL

  2. Jak stworzyć inicjator do tworzenia i migracji bazy danych mysql?

  3. Czy istnieje alternatywa ANSI SQL dla słowa kluczowego MYSQL LIMIT?

  4. Kiedy powinienem używać MySQLi zamiast MySQL?

  5. Przetwarzaj klauzulę SELECT zapytań SQL do tablicy PHP