Tôi có một mô hình django siêu đơn giản ở đây:Django Xóa tất cả nhưng cuối cùng năm người queryset
class Notification(models.Model):
message = models.TextField()
user = models.ForeignKey(User)
timestamp = models.DateTimeField(default=datetime.datetime.now)
Sử dụng ajax, tôi kiểm tra thư mới mỗi phút. Tôi chỉ hiển thị năm thông báo gần đây nhất cho người dùng bất kỳ lúc nào. Những gì tôi đang cố gắng tránh, là kịch bản sau đây.
Nhật ký người dùng và không có thông báo. Khi cửa sổ của người dùng bật lên, anh ta nhận được 10 tin nhắn mới. Vì tôi chỉ cho anh ta xem năm, không có vấn đề gì. Sự cố xảy ra khi người dùng bắt đầu xóa thông báo của anh ấy. Nếu anh ta xóa năm được hiển thị, năm cái cũ hơn sẽ được hiển thị trên cuộc gọi ajax tiếp theo hoặc làm mới.
Tôi muốn phương pháp lưu của mô hình của tôi xóa mọi thứ trừ 5 đối tượng gần đây nhất bất kỳ khi nào một đối tượng mới được lưu. Thật không may, bạn không thể sử dụng [5:] để làm điều này. Cứu giúp?
EDIT
Tôi cố gắng này mà không làm việc như mong đợi (trong phương pháp tiết kiệm của mô hình):
notes = Notification.objects.filter(user=self.user)[:4]
Notification.objects.exclude(pk__in=notes).delete()
tôi không thể tìm thấy một mẫu trong hành vi kỳ lạ, nhưng sau một trong khi thử nghiệm, nó sẽ chỉ xóa một trong những gần đây nhất khi một cái mới được tạo ra. tôi KHÔNG biết tại sao điều này lại xảy ra. thứ tự được quan tâm trong lớp Meta của mô hình (theo dấu thời gian giảm dần). cảm ơn sự giúp đỡ, nhưng cách của tôi dường như là người duy nhất hoạt động liên tục.
hữu ích để nhấn mạnh rằng thực tế là bạn không thể sử dụng xóa trên một lát được giải thích trong doc: https: //docs.djangoproject.com/en/dev/ref/mô hình/querysets/# xóa - nó làm tăng một 'Không thể sử dụng 'giới hạn' hoặc 'bù đắp' với lỗi xóa'. Tôi đã hy vọng rằng kể từ '09 một cái gì đó đã thay đổi nhưng "cho" giải pháp vẫn có vẻ là người duy nhất! – Stefano