-
除了
Widget.get_context()
'widget'
键之外,MultiWidget
添加了widget['subwidgets']
键。这些可以在小部件模板中循环:
{% for subwidget in widget.subwidgets %} {% include subwidget.template_name with widget=subwidget %} {% endfor %}
本文介绍 django.forms.MultiWidget.get_context
的用法。
声明
get_context(name, value, attrs)
这是一个示例小部件,它继承了
以在不同的选择框中显示带有日、月和年的日期。此小部件旨在与 MultiWidget
而不是 DateField
一起使用,因此我们实现了 MultiValueField
:value_from_datadict()
from datetime import date
from django import forms
class DateSelectorWidget(forms.MultiWidget):
def __init__(self, attrs=None):
days = [(day, day) for day in range(1, 32)]
months = [(month, month) for month in range(1, 13)]
years = [(year, year) for year in [2018, 2019, 2020]]
widgets = [
forms.Select(attrs=attrs, choices=days),
forms.Select(attrs=attrs, choices=months),
forms.Select(attrs=attrs, choices=years),
]
super().__init__(widgets, attrs)
def decompress(self, value):
if isinstance(value, date):
return [value.day, value.month, value.year]
elif isinstance(value, str):
year, month, day = value.split('-')
return [day, month, year]
return [None, None, None]
def value_from_datadict(self, data, files, name):
day, month, year = super().value_from_datadict(data, files, name)
# DateField expects a single string that it can parse into a date.
return '{}-{}-{}'.format(year, month, day)
构造函数在列表中创建几个
小部件。 Select
super()
方法使用此列表来设置小部件。
所需的方法
将decompress()
datetime.date
值分解为与每个小部件对应的日、月和年值。如果选择了无效的日期,例如不存在的 2 月 30 日,则
会改为将此方法传递给字符串,因此需要解析。当 DateField
value
为 None
时,最后的 return
处理,这意味着我们的子小部件没有任何默认值。
的默认实现返回与每个 value_from_datadict()
Widget
对应的值列表。这适用于将 MultiWidget
与
一起使用。但由于我们想将此小部件与 MultiValueField
一起使用,它采用单个值,因此我们重写了此方法。这里的实现将来自子小部件的数据组合成 DateField
期望格式的字符串。DateField
相关用法
- Python Django MultiWidget.widgets用法及代码示例
- Python Django MultiWidget.decompress用法及代码示例
- Python Django MultiPolygon用法及代码示例
- Python Django MultiLineString用法及代码示例
- Python Django MultiPoint用法及代码示例
- Python Django MultipleObjectMixin用法及代码示例
- Python Django MultiValueField.require_all_fields用法及代码示例
- Python Matplotlib.figure.Figure.add_gridspec()用法及代码示例
- Python Matplotlib.figure.Figure.subplots_adjust()用法及代码示例
- Python Matplotlib.pyplot.matshow()用法及代码示例
- Python Matplotlib.axis.Axis.get_tick_space()用法及代码示例
- Python Matplotlib.pyplot.thetagrids()用法及代码示例
- Python Django ModelAdmin.get_changeform_initial_data用法及代码示例
- Python Matplotlib.axes.Axes.text()用法及代码示例
- Python Matplotlib.pyplot.ion()用法及代码示例
- Python Matplotlib.axes.Axes.start_pan()用法及代码示例
- Python Django ModelAdmin.get_formset_kwargs用法及代码示例
- Python Matplotlib.axes.Axes.get_ylabel()用法及代码示例
- Python Matplotlib.axis.Axis.get_major_locator()用法及代码示例
- Python Numpy MaskedArray.argmin()用法及代码示例
- Python Matplotlib.axis.Tick.get_window_extent()用法及代码示例
- Python Matplotlib.artist.Artist.set_alpha()用法及代码示例
- Python Matplotlib.pyplot.xkcd()用法及代码示例
- Python Matplotlib.colors.TwoSlopeNorm用法及代码示例
- Python Matplotlib.pyplot.axvspan()用法及代码示例
注:本文由纯净天空筛选整理自djangoproject.com大神的英文原创作品 django.forms.MultiWidget.get_context。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。