Django嵌套内联线

Django嵌套内联线,django,django-admin,django-cms,Django,Django Admin,Django Cms,我正在开发一个定制的Django CMS插件,遇到了一个需要嵌套内联线的情况。下面是我的模型结构 class Link(NavLink): card = models.ForeignKey('CardPanel', related_name='card_links') class CardPanel(models.Model): title = models.CharField(max_length=50) image = FilerImageField(null=Tr

我正在开发一个定制的Django CMS插件,遇到了一个需要嵌套内联线的情况。下面是我的模型结构

class Link(NavLink):
    card = models.ForeignKey('CardPanel', related_name='card_links')

class CardPanel(models.Model):
    title = models.CharField(max_length=50)
    image = FilerImageField(null=True, blank=True, related_name="navigation_vertical_link_image")
    link_description = HTMLField(blank=True, null=True, max_length=150)
    button_link_internal = PageField(blank=True, null=True)
    button_link_external = models.URLField(blank=True, null=True)
    plugin = models.ForeignKey('Panel')

class Panel(CMSPlugin):
    pass

理想情况下,我需要的是嵌套的内联线。因此,由于链接模型与CardPanel具有m:1关系,CardPanel与面板模型具有m:1关系,因此我希望能够添加包含多个链接模型的多个CardPanel。通过Django中的ModelAdmin实现这一点的最佳方法是什么?

如果它是您在这里创建的插件,那么从3.0开始,这些只是:

在新系统中,
占位符
及其插件不再在管理站点中管理,而是仅从前端管理

因此,
CMSPlugins
有各种属性,我认为您会发现它们对这一点很有用,包括CMS附带的一些标准插件。如果是插件,则不需要在模型上指定
plugin
属性

我会调整你的插件类和相应的模型,使之更像

# models.py
from cms.models.fields import PlaceholderField

class CardPanel(CMSPlugin):
    title = models.CharField(max_length=50)
    image = FilerImageField(
        null=True,
        blank=True,
        related_name="navigation_vertical_link_image"
    )
    content = PlaceholderField('card_panel_content')

# cms_plugins.py

from cms.plugin_base import CMSPluginBase
from cms.plugin_pool import plugin_pool

from .models import CardPanel


@plugin_pool.register_plugin
class CardPanel(CMSPluginBase):
    """ Plugin to contain card panels """
    model = CardPanel
    parent_classes = ['Panel']  # Include this if a card panel only exists in a panel

@plugin_pool.register_plugin
class Panel(CMSPluginBase):
    """ Plugin to contain card panels """
    model = CMSPlugin
    allow_children = True  # Allow the Panel to include other plugins
    child_classes = ['CardPanel']
通过在
CardPanel
上包含
占位符字段
,您可以呈现模型实例的占位符&向该实例添加CMS插件,方法与将其添加到页面相同。通过这种方式,您可以根据需要添加任意多的链接插件,如果不使用,还可以添加页面链接或外部链接

模板中呈现的占位符字段如下所示

{% load cms_tags %}

{% render_placeholder card_panel_instance.content %}

占位符字段
也可以向管理员注册

什么是
NavLink
?我通常不会在admin中注册插件使用的模型,所以我认为有更好的方法来实现这一点,但我很好奇这个模型是什么。NavLink是一个包含链接标题、url和外部链接的抽象模型。我正在寻找最好的方法,不仅仅是管理员。