Django 继承和永久链接

2023-12-12

我正在 django 中创建一个简单的 CMS,其中包含多个“模块”(每个模块都是一个 django 应用程序)。我设置了以下模型:

class FooObject(models.Model):
    id = models.SlugField(primary_key=True)
    name = models.CharField(max_length=255)
    creator = models.ForeignKey(auth.models.User, editable=False, related_name="createdby")

class FooPage(FooObject):
    content = models.TextField(blank=True, null=True)

    @models.permalink
    def get_absolute_url(self):
        return ('page', (), {'page_id':self.id}

class FooSubitem(FooObject):
    parent = models.ForeignKey(FooPage, related_name='subitems')

在每个模块中,我创建一个 FooPage 的子类,以及至少一个 FooSubitem 的子类,例如

# in FooBlog.models
class FooBlog(FooPage):
    owner = models.ForeignKey(auth.models.User, editable=False)

    @models.permalink
    def get_absolute_url(self):
        return ('blog', (), {'blog_id':self.id})

class FooPost(FooSubitem):
    post_time = models.DateTimeField(auto_now_add=True)

and

# in FooGallery.models
class FooGallery(FooPage):
    location = models.CharField(max_length=255)

    @models.permalink
    def get_absolute_url(self):
        return ('gallery', (), {'gallery_id':self.id})

class FooImage(FooSubitem):
    image_file = models.ImageField(upload_to='foogallery')

这些是简化,但应该让您很好地了解我正在尝试做什么。在 FooPost 和 FooImage 的管理员中,我将父选择列表限制为其相应的父页面。

当我尝试在模板中使用这些时,我的问题出现了。在每个视图中,我都有以下内容:

page_list = FooPage.objects.all()

它返回 FooBlog 和 FooGallery 类型的所有 FooPage 的列表。然而,当我迭代这个列表时:

{% for page in page_list %}{{ page.get_absolute_url }}{% endfor %}

它返回“页面”URL 模式,而不是“博客”或“画廊”URL 模式。

当我稍后想添加 FooCalendar 模块时,如何才能完成这项工作而无需重写代码?我想确保这适用于任何可能的模块。

Thanks,

  • Lexo

这个问题的经典解决方案往往是将 ContentType 添加到存储该实例的子类类型的超类。这样您就可以依赖一致的 API,该 API 返回适当类型的相关子类对象。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Django 继承和永久链接 的相关文章

随机推荐

  • 在配备 Android ICS 的 Galaxy note 1 上,EditText 提示不会以阿拉伯语显示

    我有一个阿拉伯语提示 我想在对话框中使用的 EditText 中设置 它对于许多设备都可以正常工作 除了具有 Android ICS 的 Galaxy note 1 Note 1 我将手机语言转换为阿拉伯语 因此它显示了阿拉伯语提示 2 编
  • 在 Android 应用程序中动态添加单选按钮

    我需要动态添加单选按钮 单选按钮可以是 3 4 5 或 6 它会水平添加 一行最多包含 3 个单选按钮 如果超过 3 个 那么它将位于单选按钮上方行的下方 如网格视图中所示 我的单选按钮代码如下 但它在一行中显示所有单选按钮 这意味着它隐藏
  • 使用 gradle 任务创建可执行 jar 后无法找到或加载主类

    我使用 gluon 插件创建了一个新的单视图项目 并且没有更改其文件中的任何内容 如果我使用 gradle 任务application gt run效果很好 但如果我使用任务build gt jar它在下面创建了罐子SingleViewPr
  • 使用 FPDF PHP 时出现奇怪的字符?

    我在使用 FPDF 库生成 pdf 文件时得到此输出 PDF 1 3 3 0 obj endobj 4 0 obj 流 x U n 0 endobj 5 0 obj endobj 2 0 obj gt XObject gt gt gt en
  • 如何读取cakephp视图文件中的cookie值

    在此我将 cookie 值写入控制器文件中 我想读取视图文件中的 cookie 值 而不是如何可能 您必须在控制器中读取它并设置该值以使其可用于视图 this gt set myValue this gt Cookie gt read co
  • Azure SQL 使用 PowerShell 和 ServicePrincipal 为 AD 用户授予访问权限

    我尝试为 Azure SQL Server 创建用户 我想使用 AzureAD 用户 这是代码 accessToken az account get access token resource https database windows
  • 我需要使用 VBA 将数据从 Excel 导入到 SQL Server

    我正在尝试将数据从我的 PC 上的另一个 Excel 工作簿导入到 SQL Server 我尝试使用这段代码 但它不起作用 Sub insertion Dim conn As ADODB Connection Dim rs As ADODB
  • 以二进制形式设置权限

    我在学校看到一个使用二进制字符串设置权限的系统 假设 101001 41 So 1可以是第1页的权限 2 可以是第2页的权限 4 可以是第3页的权限 8可以是第4页的权限 16可以是第5页的权限 32可以是第6页的权限 假设我得到了上面的二
  • 阿卡。安卓。 NoSuchMethodException:

    当我在 Android 上运行使用 Akka 的应用程序时 我收到以下异常 04 29 16 13 06 235 E AndroidRuntime 8968 java lang RuntimeException Unable to star
  • 仅从字符串中提取数字

    据说我有一个包含以下内容的字符串 hello 14 12 现在我只想提取数字 并在两个变量中有两个单独的值 如下所示 first num值应该是int 即first num 14 第二个变量应该存储冒号后面的数字 即 Second num
  • 如何在 Swift 中制作可设计的 UIImage

    我是初学者 我想制作一个 swift 文件 其中包含制作可设计 UIImage 的代码 因此我不会通过编码来编辑 UI 元素显示 只需在界面构建器中将此 swift 文件分配给 UI 类即可 我可以在 UIButton 中做类似的事情 例如
  • 每个key必须是一个数字字符串;得到未定义的量角器

    我正在尝试从 json 文件读取数据 但遇到了一些问题 如何将 json 文件中的项目获取到单个项目 我的 json 文件 UserName email protected Password tests123 我的方法 element by
  • 无法从 http 端点消费

    下面给出了我的路线 我正在尝试使用 HTTP 组件交换数据 URI 包含提交数据并获取响应应该获取数据 但它不起作用
  • 如何减去年份?

    我在 R 中有一个约会 例如 dt as Date 2010 03 17 我想从此日期减去 2 年 而不用担心闰年和此类问题 得到as Date 2008 03 17 我该怎么做呢 With lubridate library lubrid
  • 如何使用 Notepad++ Compare 作为 git bash/命令行中的 diff 工具?

    有什么方法可以更改 gitbash 中的默认 diff 工具吗 这篇文章似乎表明这是可能的 但他们没有提供命令行示例 关联 从命令行运行 NotePad 并使用比较插件显示比较结果 由于 Notepad 的官方 diff 插件似乎是uph0
  • Drools 6.4 KieScanner:如何在 Maven 中创建和添加带有规则的 Jar?

    我是 Drools 和 Maven 的初学者 我面临着使用 KieScanner 加载规则的问题 该项目的目标是能够在永久 KieSession 中动态加载规则 我想知道是否可以使用 KieFileSystem 管理规则 不确定是否可以在不
  • 如何解决Odoo中不存在列res_partner.

    例如 reonp 很好地添加到了模型中 但是当我尝试添加 gradjanin 时 Odoo 10 会引发错误 我试图重新启动服务器 py class komPartnerrReon models Model inherit res part
  • 使用带有像素后备的 rems

    我正在研究移动优先框架 该项目有广泛的需求 需要满足不同地点的大量浏览器和设备 我的主要目标地点之一是印度 那里的浏览器和设备使用趋势与英国或美 国有很大不同 印度浏览器使用情况http gs statcounter com all bro
  • 如果使用autowidth:true,如何删除免费的jqgrid自己的水平滚动条

    使用以下设置将免费 jqgrid 宽度设置为至少占据整个窗口宽度jqGrid 和自动宽度选项 它是如何工作的 answer autowidth true shrinkToFit false 使用以下答案中的样式使顶级工具栏图标变得更大 如果
  • Django 继承和永久链接

    我正在 django 中创建一个简单的 CMS 其中包含多个 模块 每个模块都是一个 django 应用程序 我设置了以下模型 class FooObject models Model id models SlugField primary