Trong Django, tôi có hai mô hình:Làm thế nào để làm tham gia truy vấn này trong Django
class Product(models.Model):
name = models.CharField(max_length = 50)
categories = models.ManyToManyField(Category)
class ProductRank(models.Model):
product = models.ForeignKey(Product)
rank = models.IntegerField(default = 0)
tôi đặt cấp bậc vào một bảng riêng biệt vì mỗi cái nhìn của một trang sẽ làm cho thứ hạng thay đổi và tôi đã rất lo lắng rằng tất cả các ghi này sẽ làm cho các truy vấn khác của tôi (chủ yếu là đọc) chậm lại.
tôi thu thập một danh sách các Products
từ một truy vấn đơn giản:
cat = Category.objects.get(pk = 1)
products = Product.objects.filter(categories = cat)
bây giờ tôi muốn có được tất cả các cấp bậc cho các sản phẩm này. Tôi muốn làm tất cả trong một đi (sử dụng một tham gia SQL) và đã tự hỏi làm thế nào để thể hiện rằng bằng cách sử dụng cơ chế truy vấn của Django.
Cách thích hợp để thực hiện việc này ở Django là gì?
Âm thanh như tối ưu hóa sớm. Bạn có bất kỳ bằng chứng profiler rằng "tất cả những viết này sẽ làm cho các truy vấn khác của tôi chậm lại"? Hoặc rằng hiệu ứng đó là tồi tệ hơn so với chậm xuống từ JOIN bổ sung khi bạn cần phải đọc thứ hạng? Viết nó một cách đơn giản đầu tiên và không tối ưu hóa cho đến khi bạn đã chứng minh rằng nó là cần thiết. –