【发布时间】:2017-03-31 04:21:58
【问题描述】:
这是我尝试过的。它可以工作,但额外的字段 text1 被渲染为一个没有标签的普通输入字段,也没有很酷的 wagtail 渲染。请问如何在表单中添加额外的字段并获得很酷的 wagtail 渲染?
这是 WagtailAdminPageForm 文档的link:
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
【问题讨论】:
-
已发布暂定答案,尽管我意识到将
FieldPanel('text1')移动到 RandomPage 可能不是一个选择(包括“我尝试这样做,但它坏了”:-))如果是这种情况,请更新问题以详细说明。 -
是的 :-) 当我为 text1 添加 FieldPanel 时,RandomPage 生气了。因为模型中不存在 text1。欢迎提出更多建议,谢谢。