Я создаю CMS для веб-сайта моей компании (я посмотрел на существующие решения Django и хочу что-то гораздо более тонкое и простое, и которое бы конкретно учитывало нашу ситуацию. Плюс, я бы хотел изучить этот материал лучше). У меня проблемы с нахождением общих отношений.
У меня есть модель Page
, модель SoftwareModule
и некоторые другие модели, определяющие контент на нашем веб-сайте, для каждой из которых определена get_absolute_url()
. Я бы хотел, чтобы мои пользователи могли назначать любому экземпляру Page
список объектов любого типа, включая другие экземпляры страниц. Этот список станет подменю этого экземпляра Page
.
Я пробовал следующее:
class Page(models.Model):
body = models.TextField()
links = generic.GenericRelation("LinkedItem")
@models.permalink
def get_absolute_url(self):
# returns the right URL
class LinkedItem(models.Model):
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
content_object = generic.GenericForeignKey('content_type', 'object_id')
title = models.CharField(max_length=100)
def __unicode__(self):
return self.title
class SoftwareModule(models.Model):
name = models.CharField(max_length=100)
description = models.TextField()
def __unicode__(self):
return self.name
@models.permalink
def get_absolute_url(self):
# returns the right URL
Это дает мне общие отношения с API для выполнения page_instance.links.all()
. Мы в пути. То, что я не уверен, как осуществить, находится на форме изменения экземпляра страницы, как создать связь между этой страницей и любым другим существующим объектом в базе данных. Мой желаемый конечный результат: сделать следующее в шаблоне:
<ul>
{% for link in page.links.all %}
<li><a href='{{ link.content_object.get_absolute_url() }}'>{{ link.title }}</a></li>
{% endfor%}
</ul>
Очевидно, что я чего-то не знаю или неправильно понимаю, но я чувствую, что иду в ту область, где я не знаю, чего не знаю. Чего мне не хватает?