【发布时间】:2021-11-02 07:04:17
【问题描述】:
如何从 Wagtail 的表单构建器中获取单个字段,并将它们显示为呈现表单中的两个单独的部分(边)。
在下面的表单代码中,名称和选择服务是一个部分,其他部分是如何使用 for 循环和 wagtail 中的单个表单字段的其他部分。
products/models.py
from django.db import models
from wagtail.core.models import Page
from wagtail.admin.edit_handlers import FieldPanel, StreamFieldPanel
from wagtail.images.blocks import ImageChooserBlock
from streams import blocks
from wagtail.core.fields import StreamField
from wagtail.images.edit_handlers import ImageChooserPanel
from django.db import models
from wagtail.core.models import Page
from wagtail.admin.edit_handlers import FieldPanel, StreamFieldPanel
from wagtail.images.edit_handlers import ImageChooserPanel
from wagtail.core import blocks
from wagtail.core.fields import StreamField
from streams import blocks
from modelcluster.fields import ParentalKey
from wagtail.admin.edit_handlers import (
FieldPanel,
FieldRowPanel,
InlinePanel,
MultiFieldPanel
)
from wagtail.core.fields import RichTextField
from wagtail.contrib.forms.models import (
AbstractEmailForm,
AbstractFormField
)
from wagtail.core.models import Page
# Create your models here.
class FormField(AbstractFormField):
page = ParentalKey(
'ProductPage',
on_delete=models.CASCADE,
related_name='form_fields',
)
class ProductPage(AbstractEmailForm):
template = "products.html"
productslist = StreamField(
[
("title_and_text", blocks.TitleAndTextBlock()),
("full_richtext", blocks.RichtextBlock()),
("simple_richtext", blocks.SimpleRichtextBlock()),
("cards", blocks.CardBlock()),
("cta", blocks.CTABlock()),
('image', ImageChooserBlock()),
],
null=True,
blank=True,
)
header_title = models.CharField(max_length=200, blank=True, null=True)
meta_content = models.CharField(max_length=200, blank=True, null=True)
intro = RichTextField(blank=True)
thank_you_text = RichTextField(blank=True)
content_panels = AbstractEmailForm.content_panels + [
StreamFieldPanel('productslist'),
FieldPanel('header_title'),
FieldPanel('meta_content'),
FieldPanel('intro'),
InlinePanel('form_fields', label='Form Fields'),
FieldPanel('thank_you_text'),
MultiFieldPanel([
FieldRowPanel([
FieldPanel('from_address', classname="col6"),
FieldPanel('to_address', classname="col6"),
]),
FieldPanel("subject"),
], "Email Notification Config"),
]
Products.html
<form id="quickContact" class="bg-white p-4" action="{% pageurl page %}" method="POST">
{% csrf_token %}
<div class="row">
<div class="col-lg-6 col-12">
<div class="form-group mb-3">
<input type="text" class="form-control border-0 bg-dark bg-opacity-10 border-0 font-14 ps-4" name="name" placeholder="ชื่อ" >
</div>
</div>
<div class="col-lg-6 col-12">
<div class="form-group mb-3">
<select class="form-control form-select border-0 bg-dark bg-opacity-10 border-0 font-14 ps-4" name="select_service">
<option>เลือกบริการ</option>
</select>
</div>
</div>
</div>
<div class="row">
<div class="col-lg-6 col-12">
<div class="form-group mb-3">
<input type="text" class="form-control border-0 bg-dark bg-opacity-10 border-0 font-14 ps-4" placeholder="ชื่อ บริษัท">
</div>
<div class="form-group mb-3">
<input type="text" class="form-control border-0 bg-dark bg-opacity-10 border-0 font-14 ps-4" placeholder="อีเมล">
</div>
<div class="form-group mb-3">
<input type="text" class="form-control border-0 bg-dark bg-opacity-10 border-0 font-14 ps-4" placeholder="เบอร์ติดต่อ">
</div>
</div>
<div class="col-lg-6 col-12">
<textarea class="bg-dark bg-opacity-10 border-0 form-control font-14 ps-4" placeholder="คำอธิบาย" rows="7"></textarea>
</div>
</div>
<div class="row">
<div class="col-12 mt-3 text-center">
<button class="btn btn-primary w-50 rounded-pill">ส่ง</button>
</div>
</div>
</form>
</div>
</div>
【问题讨论】:
-
你的意思是两个“部分”的形式吗?
-
是的,两部分形式..我已经给出了上面的图像,就像那个图像我需要两部分形式如何做到这一点