【问题标题】:Create + Update with custom widget使用自定义小部件创建 + 更新
【发布时间】:2016-08-05 09:57:57
【问题描述】:

我创建了一个包含“SelectDateWidget”和“SelectDateWidget”的自定义小部件 当我创建一个新事件但是当我把它变成一个(UpdateView)时它工作正常

我收到一个错误

global name 'to_current_timezone' is not defined

我不知道该怎么做才能让小部件用于创建和编辑事件。

class EventUpdateView(UpdateView):
    form_class = CreateEvent
    model = Event



class EventCreateView(CreateView):
    form_class = CreateEvent
    model = Event

    def form_valid(self, form):
        Event = form.save(commit=False)
        Event.created_by = self.request.user
        Event.save()
        return HttpResponseRedirect('/calendar/')



class CreateEvent(forms.ModelForm):
    class Meta:
        model = Event
        fields = ['title', 'start', 'end', 'description', 'category']
        widgets = {

            'start': SelectDateTimeWidget(date_format= '%m/%m/%Y'),
            'end': SelectDateTimeWidget(date_format= '%d/%m/%Y')
        }

小部件,显然 SelectTimeWidget 也是一个自定义的,但错误导致我在下面的代码中看到“value = to_current_timezone(value)”这一行

class SelectDateTimeWidget(forms.MultiWidget):
    supports_microseconds = False

    def __init__(self, attrs=None, date_format=None, time_format=None):
        widgets = (SelectDateWidget(empty_label=( "Year", "Month", "Day")),
                   SelectTimeWidget(use_seconds=False))
        super(SelectDateTimeWidget, self).__init__(widgets, attrs)

    def decompress(self, value):
        if value:
            value = to_current_timezone(value)
            return [value.date(), value.time().replace(microsecond=0)]
        return [None, None]

    def subwidgets(self, name, value, attrs=None):
        if self.is_localized:
            for widget in self.widgets:
                widget.is_localized = self.is_localized
        # value is a list of values, each corresponding to a widget
        # in self.widgets.
        if not isinstance(value, list):
            value = self.decompress(value)
        output = []
        final_attrs = self.build_attrs(attrs)
        id_ = final_attrs.get('id')
        for i, widget in enumerate(self.widgets):
            try:
                widget_value = value[i]
            except IndexError:
                widget_value = None
            if id_:
                final_attrs = dict(final_attrs, id='%s_%s' % (id_, i))
            output.append(widget.render(name + '_%s' % i, widget_value, final_attrs))
        return output

有人知道解决这个问题的方法吗?

【问题讨论】:

    标签: django django-models django-forms django-views


    【解决方案1】:
    "from django.forms.util import to_current_timezone"
    

    我没有意识到 To_current_timezone 是一个导入,一旦我发现它起作用了:)

    在担心了一段时间后喜欢回答我自己的问题

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-08
      • 2023-03-20
      • 2019-11-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多