Django связанный ключ той же модели - PullRequest
2 голосов
/ 20 февраля 2012

Я работаю над функцией приложения, похожей на ретвит в Твиттере.

В модели для Item я хочу добавить связанное поле для reposted_from, которое будет ссылаться на другое Item. Я не думаю, что я использую ForeignKey для этого, так как это та же модель, но что я вместо этого использую?

Ответы [ 3 ]

6 голосов
/ 20 февраля 2012

Обычно к себе добавляется внешний ключ :

class Item(models.Model):
    parent = models.ForeignKey('self')

Вы можете указать связанное имя как таковое:

class Item(models.Model):
    parent = models.ForeignKey('self', related_name='children')

Поскольку у элемента может не быть родителя, не забудьте null = True и пусто = True как таковой:

class Item(models.Model):
    parent = models.ForeignKey('self', related_name='children', null=True, blank=True)

Тогда вы сможете запросить дочерние элементы следующим образом:

item.children

Вы также можете использовать django-mptt и воспользоваться некоторыми возможностями оптимизации и дополнительными функциями дерева:

from mptt.models import MPTTModel, TreeForeignKey

class Item(MPTTModel):
    parent = TreeForeignKey('self', null=True, blank=True, related_name='children')
0 голосов
/ 20 февраля 2012

Вы бы использовали foregein key в той же модели, если и только если вы используете строку.

class Item(models.Model):
  foo = models.ForeignKey("reposted_from")

class reposted_from(models.Model):
  repost_from = models.CharField(max_length=122)

например.

В противном случае вы получите неопределенную ссылку. Это то, что вам нужно?

0 голосов
/ 20 февраля 2012

Да, вы можете использовать ForeignKey для себя. Смотри https://docs.djangoproject.com/en/dev/ref/models/fields/#foreignkey

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...