Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 在结构块中放置标记_Django_Django Models_Tags_Wagtail - Fatal编程技术网

Django 在结构块中放置标记

Django 在结构块中放置标记,django,django-models,tags,wagtail,Django,Django Models,Tags,Wagtail,我希望能够向我创建的自定义StructBlock添加标记 当前模型如下所示 class MapsIndicatorBlock(blocks.StructBlock): text_icon = blocks.CharBlock( label='Maps/Indicators Text or Icon', required=False ) pop_up_title = blocks.CharBlock( label='Pop

我希望能够向我创建的自定义StructBlock添加标记

当前模型如下所示

class MapsIndicatorBlock(blocks.StructBlock):

    text_icon = blocks.CharBlock(
        label='Maps/Indicators Text or Icon',
        required=False
    )

    pop_up_title = blocks.CharBlock(
        label='Pop-Up Title',
        required=False
    )

    pop_up_text = blocks.RichTextBlock(
        label ='Pop-Up Text/Image',
        required=False
    )

    pop_up_colour = blocks.CharBlock(
        choices=constants.BOOTSTRAP4_BUTTON_COLOUR_CHOICES,
        default='btn btn-primary',
        max_length=128,
        required=False
    )

    tags = TaggableManager()

    objects = models.Manager()

    class Meta:
        template = 'cityregiontable/map_indicator_block.html'

TaggableManager()设计用于models.model而不是blocks.StructBlock

我试着用下面的方法创建标签,但没有成功。我得到的错误是:无法找到MapsIndicatorBlock的模型。这是正确的,因为MapsIndicatorBlock是块,而不是模型

class MITag(TaggedItemBase):
    content_object = models.ForeignKey(
        'MapsIndicatorBlock',
        on_delete=models.CASCADE,
        related_name='tagged_mi_block'
    )

如何允许块具有metadat标记?

基于文档,作为起点,我们可以生成利用现有Wagtail的自定义
字段块

这个小部件为您完成了几乎所有的工作,它将为autocomplete拉入可用的标记,并将保存任何动态创建的新标记

可以读取这些标记,并使用型号
@属性
或类似工具更方便地使用它们。记住Streamfields将数据存储为JSON,这样您就不会得到任何开箱即用的模型/数据库链接

局限性 需要注意的是,保存的标记被存储为原始字符串,这意味着如果您有一些更复杂的标记用例,那么您将需要做更多的工作来实现集成。e、 g.标记页面,显示所有使用该标记的页面或Wagtail的
ModelAdmin
中的高级标记编辑

在这些情况下,您可以找到一种将页面标记与StreamField标记“同步”的方法,也可以将此工作抽象为mixin。或者,您也可以在标记页面上修改查询,以包括包含所需streamfield数据的查询

示例代码 来自itertools导入链的

来自django导入表单
从wagtail.admin.edit_handlers导入字段面板,StreamFieldPanel
从wagtail.admin.widgets导入AdminTagWidget
从wagtail.core.blocks导入CharBlock、FieldBlock、StructBlock、RichTextBlock
从wagtail.core.fields导入StreamField
从wagtail.core.models导入页面
类标记块(字段块):
"""
将使用Wagtail标记系统的基本流块。
仅将标记存储为简单字符串。
"""
定义初始化(self,required=False,help\u text=None,**kwargs):
#注意:如果要将此标记添加到现有streamfield,则-required=False很重要
self.field=forms.CharField(widget=AdminTagWidget,required=False)
超级()
类映射块(StructBlock):
title=CharBlock(label=“title”,必需=False)
content=RichTextBlock(label=“content”,required=False)
tags=TagsBlock(label=“tags”,required=False)
类元:
图标='站点'
类别位置第页(第页):
"""
特定位置的详细信息。
"""
# ... 其他领域
#这是添加的流字段
map_info=StreamField([('map',MapBlock(required=False))],blank=True)
@财产
def get_标签(自我):
"""
用于拉出保存在结构值内的标记的有用属性
重要提示:对名称和结构进行一些艰难的假设
不获取标记的id,仅获取作为列表的字符串
"""
tags_all=[block.value.get('tags','')。self.test_b中块的拆分('',')]
标签=列表(链。从可编辑(标签全部))
返回标签
#要在管理视图中显示给编辑器的字段
内容面板=[
FieldPanel('title',classname=“full”),
StreamFieldPanel(“地图信息”),
#……其他
]
# ... 页面模型的其余部分
谢谢,回答这个问题帮助我回答了这个问题。

基于的文档作为起点,我们能够生成一个利用现有Wagtail的自定义
字段块

这个小部件为您完成了几乎所有的工作,它将为autocomplete拉入可用的标记,并将保存任何动态创建的新标记

可以读取这些标记,并使用型号
@属性
或类似工具更方便地使用它们。记住Streamfields将数据存储为JSON,这样您就不会得到任何开箱即用的模型/数据库链接

局限性 需要注意的是,保存的标记被存储为原始字符串,这意味着如果您有一些更复杂的标记用例,那么您将需要做更多的工作来实现集成。e、 g.标记页面,显示所有使用该标记的页面或Wagtail的
ModelAdmin
中的高级标记编辑

在这些情况下,您可以找到一种将页面标记与StreamField标记“同步”的方法,也可以将此工作抽象为mixin。或者,您也可以在标记页面上修改查询,以包括包含所需streamfield数据的查询

示例代码 来自itertools导入链的

来自django导入表单
从wagtail.admin.edit_handlers导入字段面板,StreamFieldPanel
从wagtail.admin.widgets导入AdminTagWidget
从wagtail.core.blocks导入CharBlock、FieldBlock、StructBlock、RichTextBlock
从wagtail.core.fields导入StreamField
从wagtail.core.models导入页面
类标记块(字段块):
"""
将使用Wagtail标记系统的基本流块。
仅将标记存储为简单字符串。
"""
定义初始化(self,required=False,help\u text=None,**kwargs):
#注意:如果要将此标记添加到现有streamfield,则-required=False很重要
self.field=forms.CharField(widget=AdminTagWidget,required=False)
超级()
类映射块(StructBlock):
title=CharBlock(label=“title”,必需=False)
content=RichTextBlock(label=“content”,required=False)
tags=TagsBlock(label=“tags”,required=False)
类元:
图标='站点'
类别位置第页(第页):
"""
特定位置的详细信息。
"""
# ... 其他领域
#这是添加的流字段
map_info=StreamField([('map',MapBlock(required=False))],blank=True)
@财产
def get