【问题标题】:Pre-Populate template field with default value from model in Django/Wagtail使用 Django/Wagtail 中模型的默认值预填充模板字段
【发布时间】:2018-04-15 04:29:16
【问题描述】:

我想添加一个默认值并让它填充基于 Django 模型的 Wagtail 模板中的字段。我知道我正在返回该值,因为如果我用这个值填充“帮助文本”属性,它可以工作,但我无法让它用默认属性填充字段。我正在为内容面板使用字段面板。这堂课很长,所以我没有发布整个内容。

def live_video_url():
    return constants.streaming_info['live-video-captions']


class MeetingPage(Page):
    live_video_url = models.URLField(
        default=live_video_url, 
        blank=False, 
        help_text=live_video_url, 
        null=True
    )
    content_panels = [
        FieldPanel('live_video_url'),
    ]

我在 Wagtail 编辑器的实际字段中得到了这个,但是帮助文本中的正确 url 字符串:

<django.db.models.query_utils.DeferredAttribute object at 0x104547470>

【问题讨论】:

  • 不确定这是否是您的问题,因为您似乎在说字段值本身呈现不正确,但help_text 不接受您传递的可调用对象。它必须是一个字符串。
  • 无论我将它呈现为字符串还是作为可调用的返回值,帮助文本都可以工作:这些工作中的任何一个:return str(constants.streaming_info['live-video-captions']) - 或 - 返回 constants.streaming_info['live-video-captions']
  • constants 在哪里以及如何定义?您可以将此添加到您的问题中吗?
  • null=True 不可能是正确的。不应在字符串字段上使用 null。 docs.djangoproject.com/en/2.0/ref/models/fields/#null

标签: django django-models wagtail


【解决方案1】:

在 wagtail 管理员的字段中添加默认值的示例

# models.py

from django.db import models
from wagtail.core.models import Page
from wagtail.admin.edit_handlers import FieldPanel
from wagtail.admin.forms import WagtailAdminPageForm


class MyItemForm(WagtailAdminPageForm):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

        description = self.fields["description"]
        description.widget.attrs["value"] = "My new initial data"


class MyItem(Page):
    description = models.CharField(max_length=255, default='', blank=True)

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

    base_form_class = MyItemForm

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-19
    • 2015-11-02
    • 2012-08-09
    • 1970-01-01
    • 2017-01-28
    • 2011-02-16
    相关资源
    最近更新 更多