gpt4 book ai didi

django - Wagtail - 如何将额外的表单字段(不是来自页面模型)添加到管理页面编辑表单并获得 wagtail 渲染

转载 作者:行者123 更新时间:2023-12-02 09:09:05 29 4
gpt4 key购买 nike

这是我尝试过的。它可以工作,但额外的字段 text1 被渲染为一个普通的输入字段,没有标签,也没有很酷的 wagtail 渲染。我怎样才能向表单添加额外的字段并获得很酷的 wagtail 渲染?

这是一个link到 WagtailAdminPageForm 文档:

class Review(models.Model):

page = models.OneToOneField(
'wagtailcore.Page',
verbose_name=('page'),
related_name='review',
on_delete=models.CASCADE)
text1 = models.CharField(null=True, blank=True, max_length=50)


class RandomPageForm(WagtailAdminPageForm):
""" Custom form for RandomPage """

text1 = forms.CharField() # <-- extra field here!

def __init__(self, data=None, files=None, parent_page=None, *args, **kwargs):
super(RandomPageForm, self).__init__(data, files, *args, **kwargs)

if self.instance.id:
review, created = Review.objects.get_or_create(page_id=self.instance.id)
print "set form.text1 to model.text1"
self.fields['text1'].initial = review.text1

# !!! Below has no effect
self.instance.content_panels = Page.content_panels + [
FieldPanel('body'),
FieldPanel('text1'),
]

def save(self, commit=True):
page = super(RandomPageForm, self).save(commit=False)
review, created = Review.objects.get_or_create(page=page)
review.text1 = self.data["text1"]
review.save()
return page

class RandomPage(Page):

body = RichTextField(blank=True)

content_panels = Page.content_panels + [
FieldPanel('body', classname="full"),
]

base_form_class = RandomPageForm

Attached is an image of the plain input box

最佳答案

基于每个实例编辑面板定义不起作用,因为面板定义被编译到在类级别缓存的 EditHandler 对象中:https://github.com/wagtail/wagtail/blob/48949e69a7a7039cb751f1ee33ecb32187004030/wagtail/wagtailadmin/edit_handlers.py#L804

就您发布的代码片段而言,看起来将 FieldPanel('text1') 移动到 RandomPage 的 content_panels 代码片段应该可以完成这项工作(尽管我从未在非模型字段中尝试过)。

关于django - Wagtail - 如何将额外的表单字段(不是来自页面模型)添加到管理页面编辑表单并获得 wagtail 渲染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43132415/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com