Какая польза от рекурсивных отношений и отношений с неопределенной моделью в Django? - PullRequest
3 голосов
/ 30 октября 2011

Текст ниже взят из документов Django, которые предоставляют

Для создания рекурсивного отношение - объект, который имеет отношение «многие-к-одному» с самим собой - использует models.ForeignKey («self»). Если вам нужно создать отношение на модели, которая еще не была определена, вы можете использовать имя модели, а не сам объект модели.

Может ли кто-нибудь привести пример использования этих возможностей в Django? Спасибо

Ответы [ 2 ]

3 голосов
/ 30 октября 2011

Вы можете использовать его для создания ссылок на другие объекты этой Модели.

Например, если у вас много участников на веб-сайте и у каждого есть приглашающий (также типа участника), вы можете сделать следующее:

class Member(Model):
    inviter = models.ForeignKey(
        'self',
        related_name="invited_set"
    )

Если вы хотите пригласить, вы делаете:

Member.objects.get(id__exact=5).inviter

Если вы хотите, чтобы все участники, приглашенные этим участником, использовали:

Member.objects.get(id__exact=5).invited_set
1 голос
/ 30 октября 2011

Для моделей, которые еще не определены:

class Gallery(models.Model):
    title_image = models.ForeignKey('Image')

class Image(models.Model):
    part_of = models.ForeignKey(Gallery)

, поскольку эти классы ссылаются друг на друга, по крайней мере один из них должен ссылаться на класс, еще не определенный.

...