我怎样才能在 Wagtail Admin 中获得 CharField 的下拉列表?
How can i get a dropdown for a CharField in Wagtail Admin?
在 Django Admin 中,可以添加一个包含所有可能枚举值的下拉选择器,如下例所示:
class ThesisStatus(models.TextChoices):
OPEN = 'O', _('Offen')
TAKEN = 'T', _('Vergeben')
WORK_IN_PROGRESS = 'W', _('In Arbeit')
COMPLETED = 'C', _('Komplett')
ABORTED = 'A', _('Abgebrochen')
status = models.CharField(
max_length=1,
choices=ThesisStatus.choices,
default=ThesisStatus.OPEN,
)
在 wagtail 中,这不起作用:
panels = [
FieldPanel('status'),
]
如果该字段是 CharField
,但它确实适用于 TextField
。我如何为 CharField
修复或实施此问题?
上面的代码在使用 CharField
时工作正常,所以我假设您想使用 TextField
来代替它。
在定义 Django 模型的字段时,每个字段都带有一个默认小部件,CharField
在向字段提供 choices
并使用 Select
小部件时有一些更智能的处理.
但是,TextField
's default widget 是 TextArea
,因此您需要向 Wagtail 提供您要使用的小部件。
Widgets 是一个 Django 术语,表示如何将字段显示为 HTML 字段,Select
widget 是您想要用于下拉列表的内容,但还有许多其他内置小部件.
最后,告诉 Wagtail 要为 FieldPanel
you need to pass in a widget
kwarg 使用什么小部件。
在此之后,您应该会看到 UI 将显示 select 下拉列表,但将作为 TextField
存储在数据库中。
示例:models.py
from django import forms
from django.db import models
class MyPage(Page):
# ... other fields
class ThesisStatus(models.TextChoices):
OPEN = "O", "Offen"
TAKEN = "T", "Vergeben"
WORK_IN_PROGRESS = "W", "In Arbeit"
COMPLETED = "C", "Komplett"
ABORTED = "A", "Abgebrochen"
# note: using `models.TextField` here
status = models.TextField(
max_length=1,
choices=ThesisStatus.choices,
default=ThesisStatus.OPEN,
)
content_panels = Page.content_panels + [
FieldPanel("status", widget=forms.Select), # note: using widget here
# ... other panels
]
文档链接
在 Django Admin 中,可以添加一个包含所有可能枚举值的下拉选择器,如下例所示:
class ThesisStatus(models.TextChoices):
OPEN = 'O', _('Offen')
TAKEN = 'T', _('Vergeben')
WORK_IN_PROGRESS = 'W', _('In Arbeit')
COMPLETED = 'C', _('Komplett')
ABORTED = 'A', _('Abgebrochen')
status = models.CharField(
max_length=1,
choices=ThesisStatus.choices,
default=ThesisStatus.OPEN,
)
在 wagtail 中,这不起作用:
panels = [
FieldPanel('status'),
]
如果该字段是 CharField
,但它确实适用于 TextField
。我如何为 CharField
修复或实施此问题?
上面的代码在使用 CharField
时工作正常,所以我假设您想使用 TextField
来代替它。
在定义 Django 模型的字段时,每个字段都带有一个默认小部件,CharField
在向字段提供 choices
并使用 Select
小部件时有一些更智能的处理.
但是,TextField
's default widget 是 TextArea
,因此您需要向 Wagtail 提供您要使用的小部件。
Widgets 是一个 Django 术语,表示如何将字段显示为 HTML 字段,Select
widget 是您想要用于下拉列表的内容,但还有许多其他内置小部件.
最后,告诉 Wagtail 要为 FieldPanel
you need to pass in a widget
kwarg 使用什么小部件。
在此之后,您应该会看到 UI 将显示 select 下拉列表,但将作为 TextField
存储在数据库中。
示例:models.py
from django import forms
from django.db import models
class MyPage(Page):
# ... other fields
class ThesisStatus(models.TextChoices):
OPEN = "O", "Offen"
TAKEN = "T", "Vergeben"
WORK_IN_PROGRESS = "W", "In Arbeit"
COMPLETED = "C", "Komplett"
ABORTED = "A", "Abgebrochen"
# note: using `models.TextField` here
status = models.TextField(
max_length=1,
choices=ThesisStatus.choices,
default=ThesisStatus.OPEN,
)
content_panels = Page.content_panels + [
FieldPanel("status", widget=forms.Select), # note: using widget here
# ... other panels
]