Джанго-модель: как ссылаться на себя?
Предположим, что мы имеем класс Employee
. Я хочу иметь поле, которое ссылается на другой экземпляр того же класса.
Как это написать? Как насчет следующего кода?
ref_employee= models.ForeignKey('self',null=True,blank=True)
Ответы
Ответ 1
http://docs.djangoproject.com/en/dev/ref/models/fields/#foreignkey
Чтобы создать рекурсивное отношение - объект, который имеет много-к-одному отношения с самим собой - используйте models.ForeignKey('self')
.
Итак, у вас все в порядке. Обычно быстрее определить, будет ли код делать то, что вы хотите, запустив его:)
Ответ 2
Я считаю, что вы даже можете исключить имя приложения, которое будет выглядеть следующим образом:
ref_employee= models.ForeignKey('Employee',null=True,blank=True)
Ответ 3
Вы можете ссылаться на другие модели по имени (используя строку, включая
пакет), а не непосредственно классом:
Итак, если ваш Employee
класс находится в hr
приложении:
class Employee(models.model):
other_employee = models.ForeignKey('hr.models.Employee', null=True, blank=True)
Ответ 4
Принудительное принуждение id
и ref_employee_id
к отдельным значениям выходит за рамки Django ORM. Вам нужно будет добавить указанное ограничение на уровне базы данных, используя SQL в syncdb или вручную.