Tôi đã chảy nước dãi trên Django cả ngày trong khi mã hóa một trang web nội bộ trong thời gian kỷ lục, nhưng bây giờ tôi nhận thấy rằng một cái gì đó rất không hiệu quả với ForeignKeys của tôi trong mô hình.Rất nhiều truy vấn từ các trường ngoại ngữ django
Tôi có một mô hình có 6 khóa ngoại, là bảng tra cứu cơ bản. Khi tôi truy vấn tất cả các đối tượng và hiển thị chúng trong một mẫu, nó chạy khoảng 10 truy vấn cho mỗi mục. Dưới đây là một số mã, mà nên giải thích nó tốt hơn:
class Website(models.Model):
domain_name = models.CharField(max_length=100)
registrant = models.ForeignKey('Registrant')
account = models.ForeignKey('Account')
registrar = models.ForeignKey('Registrar')
server = models.ForeignKey('Server', related_name='server')
host = models.ForeignKey('Host')
target_server = models.ForeignKey('Server', related_name='target')
class Registrant(models.Model):
name = models.CharField(max_length=100)
... và 5 bảng đơn giản khác. Có 155 bản ghi trang web và trong chế độ xem tôi đang sử dụng:
Website.objects.all()
Nó kết thúc thực hiện 1544 truy vấn. Trong mẫu, tôi đang sử dụng tất cả các trường nước ngoài, như sau:
<span class="value">Registrant:</span> <a href="/filter/registrant/{{ website.registrant.id }}">{{ website.registrant.name }}</a><br />
Vì vậy, tôi biết nó sẽ chạy nhiều truy vấn ... nhưng có vẻ như điều này quá mức. Điều này có bình thường không? Tôi có nên không làm theo cách này không?
Tôi khá mới đối với Django, vì vậy hy vọng tôi chỉ đang làm điều gì đó ngu ngốc. Nó chắc chắn là một khuôn khổ khá tuyệt vời.
Cảm ơn bạn! Điều đó chắc chắn làm cho rất nhiều ý nghĩa để có chức năng đó. Bây giờ nó đang chạy 9 truy vấn. Kể từ khi các bảng nhỏ, tôi không quan tâm rằng nó đang tải tất cả các dữ liệu (và rõ ràng nó là cách tốt hơn để). –