Wagtail 如何获取可订购商品的价值

问题描述 投票:0回答:1

我是 Wagtail 编程的相对新手 我的尝试是一个级联应用程序,其中标题是根据与底层元素的关系形成的。 级联的结构应该是这样的 法赫 --> 雷赫 --> 埃比尼 --> 贝哈尔特 我的模型.py

from django.db import models
from django.utils.text import slugify
from wagtail.models import Page
from wagtail.admin.panels import FieldPanel  # InlinePanel  # PageChooserPanel
from django import forms
from wagtail.admin.forms import WagtailAdminPageForm
from django.utils.translation import gettext_lazy as _
# Create your models here.


class NoTitleForm(WagtailAdminPageForm):
    title = forms.CharField(required=False, disabled=True, help_text=('Title is autogenerated'))
    slug = forms.CharField(required=False, disabled=True, help_text=('Slug is autogenerated'))

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        if not self.initial['title']:
            self.initial['title'] = _('auto-generated-title')
        if not self.initial['slug']:
            self.initial['slug'] = _('auto-generated-slug')


class ReihePage(Page):
    base_form_class = NoTitleForm

    content_panels = [
        MultiFieldPanel(
            [
                InlinePanel("Fach", label="Fach", min_num=0, max_num=10),
            ]
                      ),

        FieldPanel('title'),
        FieldPanel('slug'),
        ]

    def clean(self):
        super().clean()
        new_title = "anzahl from Fach" + "title from Fach" <--** How to get the values from the InlinePanel**
        
        self.title = new_title
        self.slug = slugify(new_title) 



class ReihePageOrderable(Orderable):
    page = ParentalKey(ReihePage, related_name="Fach", null=True)
    fach = models.ForeignKey("Fachpage", on_delete=models.SET_NULL, null=True)
    anzahl = models.IntegerField(default=1)
    
    
class FachPage(Page):
    laenge = models.IntegerField(null=True, blank=True, verbose_name='Länge in mm')
    breite = models.IntegerField(null=True, blank=True, verbose_name='Breite in mm')

    content_panels = [
        # FieldPanel('bezeichnung'),
        FieldPanel('laenge'),
        FieldPanel('breite'),
        FieldPanel('title'),
        FieldPanel('slug'),
        ]

    parent_page_types = ['FachIndexPage']

    class Meta:
        unique_together = ('laenge', 'breite')

    def clean(self):
        """Override the values of title and slug before saving."""
        super().clean()
        a = str(self.laenge)
        b = str(self.breite)
        new_title = "Fach" + " " + a + "x" + b + " mm"
        self.title = new_title
        self.slug = slugify(new_title)
    base_form_class = NoTitleForm


class FachIndexPage(Page):
    def get_context(self, request, *args, **kwargs):
        context = super().get_context(request, *args, **kwargs)

        context['Fächer'] = FachPage.objects.all()
        return context

    subpage_types = ['FachPage']

我阅读了 wagtail-site 上的文档 我尝试使用 get_context 等函数

python django wagtail
1个回答
0
投票

您想要进行 Wagtail 设置,其中每个页面的标题都基于与其相关的元素。如果我没猜错的话,你的 ReihePage 应该有一个标题,由它有多少个 FachPage 实例以及它们的标题组成,对吗? 为此,您需要从 ReihePage 获取相关的 FachPage 实例。您可以通过查询 ReihePage 模型中相关的 FachPage 实例来完成此操作。

class ReihePage(Page):
    base_form_class = NoTitleForm

    content_panels = [
        MultiFieldPanel([
            InlinePanel("fach_relation", label="Fach", min_num=0, max_num=10),
        ]),
        FieldPanel('title'),
        FieldPanel('slug'),
    ]

    def clean(self):
        super().clean()
        fach_instances = self.fach_relation.all()
        fach_count = len(fach_instances)
        fach_titles = [fach_instance.title for fach_instance in fach_instances]
        new_title = f"Count from Fach: {fach_count}, Titles: {', '.join(fach_titles)}"
        self.title = new_title
        self.slug = slugify(new_title)


class ReihePageOrderable(Orderable):
    page = ParentalKey(ReihePage, related_name="fach_relation")
    fach = models.ForeignKey("FachPage", on_delete=models.SET_NULL, null=True)
    anzahl = models.IntegerField(default=1)
© www.soinside.com 2019 - 2024. All rights reserved.