Tôi ngạc nhiên khi câu hỏi này chưa xuất hiện. Không thể tìm thấy nhiều trên web.Tương đương Django cho mục nhập mới nhất cho mỗi người dùng
Sử dụng Entry.objects.latest('created_at')
Tôi có thể khôi phục mục nhập mới nhất cho tất cả các mục nhập, nhưng nếu tôi muốn mục nhập mới nhất cho từng người dùng? Đây là một cái gì đó tương tự như một truy vấn bản ghi SQL mới nhất. Nhưng làm thế nào để tôi đạt được điều này bằng cách sử dụng ORM? Đây là cách tiếp cận của tôi, tôi tự hỏi nếu đó là cách hiệu quả nhất để làm những gì tôi muốn.
Đầu tiên tôi thực hiện truy vấn phụ: Đối tượng được nhóm theo người dùng và trường Max (mới nhất) created_by được trả về cho mỗi người dùng (created_at__max), sau đó lọc đối tượng Nhập dựa trên kết quả trong truy vấn phụ và nhận các đối tượng được yêu cầu.
Entry.objects.filter(created_at__in=Entry.objects.values('user').annotate(Max('created_at')).values_list('created_at__max'))
hoặc sử dụng một người quản lý:
class UsersLatest(models.Manager):
def get_query_set(self):
return super(UsersLatest,self).get_query_set().filter(created_at__in=self.model.objects.values('user').annotate(Max('created_at')).values_list('created_at__max'))
Có cách nào hiệu quả hơn? có thể không có truy vấn phụ?
Cảm ơn,
Paul
Tôi đã đùa giỡn với ý tưởng thêm một boolean is_latest vào mô hình của tôi, mà tôi đặt khi tôi lưu một mục mới trong phương thức form.save của tôi, sau đó khôi phục đối tượng is_latest trước đó và làm cho nó sai --- vậy là hai bước cho mỗi mục lưu. Tôi không biết đây có phải là cách tốt nhất để đi hay không. Bất kỳ đề xuất? – Paul