我正在为我公司的网站构建一个 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>
显然,有些事情我没有意识到或误解,但我觉得我正在踏入那个我不知道我不知道什么的领域。我错过了什么?