【问题标题】:MultiWidget in MultiWidget how to compress the first one?MultiWidget中的MultiWidget如何压缩第一个?
【发布时间】:2011-02-09 10:11:55
【问题描述】:

我在另一个里面有两个 MultiWidget,但问题是包含的 MultiWidget 不返回压缩,我如何从第一个小部件中获取正确的值? 在这种情况下来自 SplitTimeWidget

class SplitTimeWidget(forms.MultiWidget):
    """
    Widget written to split widget into hours and minutes.
    """
    def __init__(self, attrs=None):
        widgets = (
                    forms.Select(attrs=attrs, choices=([(hour,hour) for hour in range(0,24)])),
                    forms.Select(attrs=attrs, choices=([(minute, str(minute).zfill(2)) for minute in range(0,60)])),
                  )
        super(SplitTimeWidget, self).__init__(widgets, attrs)

    def decompress(self, value):
        if value:
            return [value.hour, value.minute]
        return [None, None]


class DateTimeSelectWidget (forms.MultiWidget):
    """
    A widget that splits date into Date and Hours, minutes, seconds with selects
    """
    date_format = DateInput.format

    def __init__(self, attrs=None, date_format=None):
        if date_format:
            self.date_format = date_format
        #if time_format:
        #    self.time_format = time_format

        hours = [(hour,str(hour)+' h') for hour in range(0,24)]
        minutes = [(minute,minute) for minute in range(0,60)]
        seconds = minutes #not used always in 0s
        widgets = (
            DateInput(attrs=attrs, format=self.date_format),
            SplitTimeWidget(attrs=attrs),
            )
        super(DateTimeSelectWidget,self).__init__(widgets, attrs)

    def decompress(self, value):
        if value:
            return [value.date(), value.time()]
        else:
            [None, None, None]

【问题讨论】:

    标签: django django-admin django-forms django-widget


    【解决方案1】:

    我将只创建一个大的 MultiWidget - 像 DateSelectTimeSplitWidget 这样的东西,它使用您需要的所有标准小部件。 (3 个选择,2 个输入)。毕竟它会被存储到一个 Timestamp 字段中,对吧?

    【讨论】:

    • 事实上我正在寻找 1xTextInput(date) 和 2xSelect(hours,minutes),我都准备好了,事实是我不想重复我自己,但无论如何它已经完成了.如果你把日期放在选择中,你会怎么做?,我的意思是在正确的月份显示 28、30 和 31 天数? javascript?
    • 我会使用 django/forms/extras/widgets.py 作为起点。如果用户选择了无效的日期(例如 2010/02/30),那么表单字段将引发通常的 ValidationError。我从来没有费心为这种情况实现一些 javascript。
    猜你喜欢
    • 2012-05-09
    • 1970-01-01
    • 2011-08-29
    • 2011-03-31
    • 2012-05-14
    • 2011-07-07
    • 2019-10-09
    • 2014-07-02
    • 2011-06-07
    相关资源
    最近更新 更多