【问题标题】:Django CMS - How to add multiple (zero or more) links on a model in adminDjango CMS - 如何在管理员中的模型上添加多个(零个或多个)链接
【发布时间】:2018-12-04 08:45:02
【问题描述】:

我是 Django CMS 的新手,我继承了一个具有以下规范的网站:

  • Django 1.10.8
  • Django CMS 3.4.5
  • Python 2.7

很遗憾,目前没有升级选项。另外,如果我的术语有误,请原谅 - 我会很感激更正。

我有一个带有 StaffStaffTranslation (等)模型的员工应用程序,我有一项任务来更新管理员以允许向每个 StaffTranslation 添加一个或多个链接。但是,我无法确定执行此操作的最佳方法以及使用哪些组件。

我已经确定了 djangocms-link 插件,这可能是一种可能性,但我找不到有关如何将多个实例添加到模型或管理页面的说明。此外,最新版本至少需要 Django 1.11。

我还发现了PageSmartLinkField——它看起来很聪明——但我无法发现如何将它与StaffTranslation 对象的数据集成或如何在该对象的管理页面上显示它。

对于如何构建它的任何建议,我将不胜感激 - 这似乎是一个足够简单的任务,我想我只是缺少一两块拼图。

最终目的是在StaffTranslation(有自己的管理页面)上有零个或多个链接,并且能够为每个链接添加至少 url 和链接文本。如果有一些 UI 助手会很聪明,允许轻松选择内部链接,但文本字段就可以了。

编辑:StaffTranslation 模型

class StaffTranslation(TimeStampedModel):
    staff = models.ForeignKey(Staff, related_name='translations')
    language = models.ForeignKey(Language)

    specialist_work_title = HTMLField(max_length=128, null=True, blank=True)  # SpecialistWorkTitle
    description = HTMLField(null=True, blank=True)  # PersonText                                                                                                                                                                                                                                                                                                                                                
    experience = HTMLField(null=True, blank=True)  # Experience

    phone_office = models.CharField(max_length=128, null=True, blank=True)  # OfficePhone
    phone_cell = models.CharField(max_length=128, null=True, blank=True)  # CellPhone

    mentions = HTMLField(null=True, blank=True)  # Mentions
    education = HTMLField(null=True, blank=True)  # Education

    other_qualifications = HTMLField(null=True, blank=True)  # OtherQualifications

    meta_title = models.TextField(null=True, blank=True)  # MetaTitle
    meta_keywords = models.TextField(null=True, blank=True)  # MetaKeywords
    meta_description = models.TextField(null=True, blank=True)  # MetaDescription

    legacy_data = models.TextField(null=True, blank=True)

    objects = querysets.StaffTranslationQuerySet.as_manager()

    # I would like to add something here like links = models.ForeignKey(Link, related_name='links') - so should I make a Link model and add as a many to many relation, and how do I integrate that into the admin?

我省略了模型上定义的函数。

再一次,升级会很好,但最早要到夏天才能实现,现在必须解决这个任务。 :)

【问题讨论】:

  • 什么是StaffTranslation?可以分享一下模型吗?如果您想添加多个链接,听起来您的模型最好有一个PlaceholderField,以便可以通过 CMS 的结构视图添加(链接)插件。
  • 如果可能,请使用 python3+ 和 django2+。设置一个虚拟环境并使用它。显示模型,我怀疑你需要一个插件来解决这个问题
  • @markwalker_ 我添加了模型作为示例。介意给我一个使用 PlaceholderField 或教程链接的提示吗?
  • @peterretief 升级尚未获得批准,未来六个月内不会发生。虽然会很好...... :)
  • @Calle 如果你有 6 个月的时间等待升级 Django 2.2 (LTS),那么这实际上是个好时机。

标签: python django django-cms


【解决方案1】:

我认为这里适合您的解决方案是占位符字段,因此您可以像任何其他插件一样为该模型的每个实例添加 CMS 插件。例如;

from cms.models.fields import PlaceholderField


class StaffTranslation(TimeStampedModel):
    ...
    content = PlaceholderField(
        'staff_translation'
    )

然后在您的详细视图模板中执行{% render_placeholder object.content %},它将显示该对象的占位符,就像在任何标准页面模板中显示占位符一样。

您显然可以添加任何 CMS 插件、链接或其他内容,它们将与您的 StaffTranslation 实例上的其他属性一起呈现。

这方面的文档在这里; http://docs.django-cms.org/en/latest/how_to/placeholders.html

【讨论】:

    猜你喜欢
    • 2017-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-14
    • 2013-04-06
    • 2019-08-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多