После фиксации объекта в дб, объект получает значение в своем поле ID.
Так:
myObject.Field1 = "value";
// Db is the datacontext
db.MyObjects.InsertOnSubmit(myObject);
db.SubmitChanges();
// You can retrieve the id from the object
int id = myObject.ID;
Используйте внутренний запрос, чтобы получить набор элементов, которые вы хотите сохранить, а затем отфильтруйте их.
objects_to_keep = Notification.objects.filter(user=user).order_by('-created_at')[:5]
Notification.objects.exclude(pk__in=objects_to_keep).delete()
Дважды проверьте это, прежде чем использовать. Я обнаружил, что более простые внутренние запросы не всегда работают должным образом. Странное поведение, которое я испытал, было ограничено наборами запросов, которые представляют собой просто order_by и срез. Поскольку вам придется фильтровать пользователей, все будет в порядке.
вот как я закончил это.
notes = Notification.objects.filter(user=self.user)
for note in notes[4:]:
note.delete()
поскольку я делаю это в методе сохранения, единственный способ, которым цикл должен был бы выполняться более одного раза, - это если бы пользователь получил сразу несколько уведомлений. меня это не беспокоит (хотя это может случиться, этого вряд ли будет достаточно, чтобы вызвать проблему).