Django. on_delete.model.SET() - установить ссылку на объект в виде функции с параметрами
В описании модели одно из полей представляет ForeignKey-ссылку на другой объект. Параметр поля value в подстановке on_delete = models.SET(value) может быть как значением, так и ссылкой на фукцию.
В данном случае необходимо в этой фукции установить параметр self чтобы вычислить номер привязываемого объекта.
Модель данных представляет собой web-страницу с контентом различного типа. Объекты контента на странице имеет некоторый порядок, реализованный односторонней привязкой к предыдущему объекту. Если какойто из объектов удаляется в ходе редактироваия страницы то следующий за ним объект должен привязаться к предыдущему относительно удаляемого, т.е. по принципу односвязного списка.
models.py
class Page(models.Model):
""" Страница с контентом. """
title = models.CharField('Заголовок', max_length=256)
content = models.ManyToManyField('Content')
# ...
class Content(models.Model):
""" Модель контента страницы Page. """
# корневой объект контента на странице
is_root = models.BooleanField('Начальный?', default=False)
# ссылка на предыдущий контент страницы
previous = models.ForeignKey(
'self'
, null=True
, default=None
, related_name='next'
, on_delete=models.SET(get_previous(self))
)
# ...
Здесь поле previous является ссылкой на собственный объект - предыдущий контент. В случае удаления связанного объекта необходима перепривязка.
Я пытаюсь реализовать перепривязку с помощью функции get_previous(self), чтобы по объектуself узнать страницу и в ней перепривязать объекты контента.
def get_previous(self):
""" Возвращает ссылку на другой предыдущий контент после удаления связанного. """
# ...
return pk
Проблема.
Параметр self в контексте on_delete = get_previous(self) не распознаётся Django - Unresolved reference 'self'.
Каким способами можно обойти эту ошибку?
Ответы (1 шт):
self не распознаётся потому что у вас он ни где не передан. Попробуйте реализовать ваш функционал в методе класса, где уже будет self. К примеру:
class Test:
...
def method(self):
return ...