В вашей функции контакты - это QuerySet .Фактические объекты не извлекаются в строке:
contacts = Model.objects.filter(owner=self.owner).order_by('-date')
, потому что вы не используете функцию, подобную list()
, вы еще не выполняете итерацию QuerySet ... Она оценивается позже.Вероятно, это является причиной вашей проблемы.
Поскольку вам нужно найти идентификатор в списке контактов и найти следующий объект в этом списке, я думаю, что нет никакого способа, кроме как выбрать все контакты и использоватьклассический цикл Python для поиска ваших объектов.
@property
def next_object_url(self):
contacts = list(Model.objects.filter(owner=self.owner).order_by('-date').all())
for curr_contact, next_contact in zip(contacts[:-1], contacts[1:]):
if curr_contact.id == self.id:
return next_contact
else:
# not found
raise ContactNotFoundError(self.id)
Другое решение - изменить модель базы данных, чтобы добавить понятие предыдущего / следующего контакта на уровне базы данных ...