Django Delete почти продержался пять из queryset

После фиксации объекта в дб, объект получает значение в своем поле 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;
26
задан Brandon Henry 7 December 2009 в 03:34
поделиться

2 ответа

Используйте внутренний запрос, чтобы получить набор элементов, которые вы хотите сохранить, а затем отфильтруйте их.

objects_to_keep = Notification.objects.filter(user=user).order_by('-created_at')[:5]
Notification.objects.exclude(pk__in=objects_to_keep).delete()

Дважды проверьте это, прежде чем использовать. Я обнаружил, что более простые внутренние запросы не всегда работают должным образом. Странное поведение, которое я испытал, было ограничено наборами запросов, которые представляют собой просто order_by и срез. Поскольку вам придется фильтровать пользователей, все будет в порядке.

11
ответ дан 28 November 2019 в 06:58
поделиться

вот как я закончил это.

    notes = Notification.objects.filter(user=self.user)
    for note in notes[4:]:
        note.delete()

поскольку я делаю это в методе сохранения, единственный способ, которым цикл должен был бы выполняться более одного раза, - это если бы пользователь получил сразу несколько уведомлений. меня это не беспокоит (хотя это может случиться, этого вряд ли будет достаточно, чтобы вызвать проблему).

8
ответ дан 28 November 2019 в 06:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: