Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Tối ưu hóa truy vấn django để kéo khóa ngoại và mối quan hệ django-taggit

Có thể sử dụng prefetch_related để truy xuất các thẻ, nhưng bạn cần tránh xung quanh thuộc tính 'tags', vì - như jdi nói - đây là một trình quản lý tùy chỉnh chứ không phải là một mối quan hệ thực sự. Thay vào đó, bạn có thể làm:

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

Rất tiếc, action.tags.all trong mã mẫu của bạn sẽ không sử dụng tìm nạp trước và sẽ kết thúc thực hiện truy vấn của riêng nó - vì vậy bạn cần thực hiện bước khá khó khăn là bỏ qua trình quản lý 'thẻ' ở đó:

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

(Chỉnh sửa:nếu bạn đang nhận được đối tượng "'QuerySet' không có thuộc tính 'prefetch_osystem'", điều đó cho thấy rằng bạn đang sử dụng phiên bản Django dưới 1.4, nơi không có sẵn prefetch_osystem.)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Thứ tự Zend_Db theo trường Giá trị

  2. Tại sao GRANT USAGE được tạo vào lần đầu tiên tôi cấp đặc quyền cho người dùng?

  3. Tôi có thể thay đổi ft_min_word_len trên chia sẻ lưu trữ không?

  4. Chèn cùng một giá trị cố định vào nhiều hàng

  5. So sánh ngày tháng trong MySQL