Đây có thể không phải là chính xác những gì bạn đang tìm kiếm, nhưng nó có thể giúp bạn đến gần hơn. Hãy xem chú thích của Django .
Dưới đây là một ví dụ về điều gì đó có thể hữu ích:
from django.db.models import Max
Customer.objects.all().annotate(most_recent_purchase=Max('purchase__date'))
Điều này sẽ cung cấp cho bạn danh sách các mô hình khách hàng của bạn, mỗi mô hình sẽ có một thuộc tính mới gọi là "most_recent_purchase" và sẽ chứa ngày họ thực hiện lần mua hàng cuối cùng. Sql được tạo ra trông giống như sau:
SELECT "demo_customer"."id",
"demo_customer"."user_id",
MAX("demo_purchase"."date") AS "most_recent_purchase"
FROM "demo_customer"
LEFT OUTER JOIN "demo_purchase" ON ("demo_customer"."id" = "demo_purchase"."customer_id")
GROUP BY "demo_customer"."id",
"demo_customer"."user_id"
Một tùy chọn khác, sẽ là thêm một thuộc tính vào mô hình khách hàng của bạn trông giống như sau:
@property
def latest_purchase(self):
return self.purchase_set.order_by('-date')[0]
Rõ ràng bạn sẽ cần phải xử lý trường hợp không có bất kỳ giao dịch mua nào trong sản phẩm này và điều này có khả năng không hoạt động tốt (vì bạn sẽ chạy một truy vấn cho mỗi khách hàng để nhận được giao dịch mua mới nhất của họ).
Tôi đã sử dụng cả hai kỹ thuật này trong quá khứ và cả hai đều hoạt động tốt trong các tình huống khác nhau. Tôi hi vọng cái này giúp được. Chúc bạn may mắn!