Ошибка ManyToManyField при наличии рекурсивной структуры. Как это решить? - PullRequest
0 голосов
/ 07 мая 2010

У меня есть следующая таблица в модели с рекурсивной структурой (страница может иметь дочерние страницы)

class DynamicPage(models.Model):    
    name = models.CharField("Titre",max_length=200)
    parent = models.ForeignKey('self',null=True,blank=True)

Я хочу создать другую таблицу с отношением ManyToMany с этой.

class UserMessage(models.Model):    
    name = models.CharField("Nom", max_length=100)
    page = models.ManyToManyField(DynamicPage)

UserMessage может отображаться на нескольких страницах, а страница может отображать несколько сообщений.

Когда я добавляю новое UserMessage, у меня возникает ошибка из-за следующего ограничения внешнего ключа.

ALTER TABLE `website_dynamicpage` ADD CONSTRAINT `parent_id_refs_id_29c58e1b` FOREIGN KEY (`parent_id`) REFERENCES `website_dynamicpage` (`id`); 

Я думаю, что моя проблема в том, что ограничение установлено для родительского поля DynamicPage, а не для его идентификатора.

У DynamicPages верхнего уровня нет родительской страницы, но они могут отображать UserMessage.

Итак, я хотел бы иметь связь ManyToMany с идентификатором страницы, а не с родительским.

В документах Django я не вижу, как сказать, что ManyToMay находится между идентификатором UserMessage и идентификатором DynamicPage, а не родителем DynamicPage.

Как это сделать? Возможно ли это?

Возможно ли воссоздание ограничения SQL вручную?

Заранее спасибо

1 Ответ

0 голосов
/ 07 мая 2010

(при условии, что я правильно понял вопрос;))

Попробуйте это:

class DynamicPage(models.Model):
    #...
    other = models.ManyToManyField("self")

с необязательным ключевым словом symmetrical (по умолчанию True).

http://docs.djangoproject.com/en/dev/ref/models/fields/#manytomanyfield

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