如何为 Wagtail TaggedItemBase 标签类设置多个 ParentalKey

2023-12-12

我有两个不同的页面模型(没有子类化,单独的应用程序,只有类似的字段是常见的字段,例如“模型名称”,“id”,“零件”),比方说,汽车和摩托车。我正在制作一个单独的页面,其中包含其部件的表格(还需要包含诸如“id”之类的列,我认为它可以是 pk、“网上商店链接”和“使用者”,它将显示所有自行车和汽车使用该部件的模型); 由于它们可以共享一些相同的部分,我希望它们连接到相同的标签模型(而不是“CarPageTag”和“BikePageTag”); 到目前为止我已经尝试过:

  • 我尝试为“零件”制作一个单独的应用程序。我想出了如何从其他应用程序中包含该类,并且它适用于汽车或摩托车,但不能同时适用于两者,因为以下错误:

AssertionError: ParentalKey(['CarsBlogApp.CarDetailPage', 'BikesBlogApp.BikeDetailPage']) 无效。第一个参数为 foreignKey 必须是模型、模型名称或字符串“self”

  • 我有一个简单的解决方案,通过 ManyToManyField 在普通 Django 应用程序中工作(但我需要管理中的 wagtail 自动填充标签选择页面)
  • 我查看了 django、wagtail 和 taggit 文档
  • 我浏览了所有 YouTube 教程

编辑:添加 models.py我认为它会起作用的方式:

PartsApp/models.py:

from django.db import models
from wagtail.core.models import Page
from wagtail.admin.edit_handlers import FieldPanel
from modelcluster.fields import ParentalKey
from taggit.models import TaggedItemBase

class PartsPage(Page):

    templates = "parts/parts_page.html"
    subpage_types = []
    max_count = 1
    parent_page_type = ['home.HomePage']
    paragraph = models.CharField(
        max_length=100,
        blank=False,
        null=False,
        help_text='Overwrites the default title',
    )

    content_panels = Page.content_panels + [
        FieldPanel("paragraph"),
    ]

    class Meta:
        verbose_name = "Needed supplies Page"
        verbose_name_plural = "Needed supplies Pages"

class PartTagPage(TaggedItemBase):
    content_object = ParentalKey(
        ['CarApp.CarDetailPage','BikeApp.BikeDetailPage'],
        related_name='tagged_items',
        on_delete=models.CASCADE,
    )

And CarsApp/models.py:

from django.db import models
from wagtail.admin.edit_handlers import FieldPanel, StreamFieldPanel
from wagtail.core.fields import StreamField
from wagtail.core.models import Page
from wagtail.images.edit_handlers import ImageChooserPanel
from blocks import blocks
from modelcluster.fields import ParentalKey
from modelcluster.contrib.taggit import ClusterTaggableManager
from taggit.models import TaggedItemBase
from PartsApp.models import PartTagPage

class CarListingPage(Page):
    template = "CarsApp/car_listing_page.html"
    subpage_types = ['CarsApp.CarDetailPage']
    parent_page_type = ['home.HomePage']
    max_count = 1
    paragraph = models.CharField(
        max_length=100,
        blank=False,
        null=False,
        help_text='Overwrites the default title',
    )

    content_panels = Page.content_panels + [
        FieldPanel("paragraph"),
    ]

    def get_context(self, request, *args, **kwargs):
        context = super().get_context(request, *args, **kwargs)
        all_cars = CarsDetailPage.objects.live().public().order_by('-first_published_at')

        if request.GET.get('tag', None):
            tags = request.GET.get('tag')
            all_cars = all_cars.filter(tags__slug__in=[tags])

        context["cars"] = all_animals
        return context

class CarDetailPage(Page):
    subpage_types = []
    parent_page_types = ['CarsApp.CarsListingPage']
    tags = ClusterTaggableManager(through='PartsApp.PartTagPage', blank=True)
    name = models.CharField(
        max_length=100,
        blank=False,
        null=False,
    )
    model = models.CharField(
        max_length=100,
        blank=False,
        null=False,
    )
    car_image = models.ForeignKey(
        "wagtailimages.Image",
        blank=False,
        null=True,
        related_name="+",
        on_delete=models.SET_NULL,
    )
    description = models.TextField(max_length=10000)

    content_panels = Page.content_panels + [
        FieldPanel("model"),
        FieldPanel("name"),
        FieldPanel("description"),
        FieldPanel("tags"),
        ImageChooserPanel("car_image"),
    ]

The BikesApp/models.py 几乎相同。 Again, 这些不起作用。


单独设置CarPageTag and BikePageTag models is你想要的解决方案(假设它们是TaggedItemBase, 按照 Wagtail 文档中显示的模式).

TaggedItemBase本身不是标签模型 - 它只是定义页面模型和标签模型之间的关系(在本例中,是taggit.Tag,django-taggit 库默认提供的标准标签模型)。所以,CarPageTag正在建立之间的关系CarPage and taggit.Tag, and BikePageTag正在建立之间的关系BikePage and taggit.Tag- 两者都使用相同的标签模型。

If you did希望汽车和自行车维护自己独立的标签集,您需要不同的模式 -自定义标签模型.

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

如何为 Wagtail TaggedItemBase 标签类设置多个 ParentalKey 的相关文章

随机推荐

  • 我需要使用 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
  • 如何在 C# 中存储之前验证 .csv 文件?

    我有一些 csv 文件 在存储到数据库之前我正在解析这些文件 我想让应用程序更加健壮 并在保存到数据库之前对 csv 文件执行验证 所以我问你们是否有一些好的链接 代码示例 模式或关于如何做到这一点的建议 我将在下面粘贴我的 csv 文件的
  • Swing:将事件委托给转换后的父组件的子组件

    我有一个自定义组件GameViewCanvas extends JPanel将容纳许多图块 800x800 纹理 现在在 GameViewCanvas 中我已经覆盖了paint 方法 以便它将在变换后的画布上绘制子项 缩放 平移和旋转 我现
  • 我应该在android服务的onDestroy方法中调用onCreate方法吗?

    我想在它被破坏时再次启动服务 Override public void onDestroy super onDestroy onCreate 你不应该这样做 这不会做任何事 要重新启动服务 您应该重新启动它onTaskRemove 像下面这
  • Python 中的二维优化(最小化)(使用 scipy.optimize)

    我正在尝试优化 最小化 二维函数E n k 定义如下 error lambda x y w math log abs Tformulated x y w math log abs Tw w 2 math atan2 Tformulated
  • HTML5 中的画布宽度和高度

    是否可以固定 HTML5 的宽度和高度canvas元素 通常的方法如下
  • 如何为 Wagtail TaggedItemBase 标签类设置多个 ParentalKey

    我有两个不同的页面模型 没有子类化 单独的应用程序 只有类似的字段是常见的字段 例如 模型名称 id 零件 比方说 汽车和摩托车 我正在制作一个单独的页面 其中包含其部件的表格 还需要包含诸如 id 之类的列 我认为它可以是 pk 网上商店