自定义时间小部件的问题

时间:2011-04-10 21:53:54

标签: python django forms widget

我有一个模型,它具有一个属性,可以引用此对象不再公开的时候。

class Story(models.Model):
    ...
    deadline = models.models.DateTimeField()

我想要做的是向用户提供设置此日期的可能性,但是以非常简单的方式和限制的方式。我会选择1-7天的“活跃期”。所以我现在正在做的是设置一个这样的自定义表单:

DAYS_CHOICES = (
    ('1', '1 day'),
    ...
    ('7', '7 days'),
)

class StoryForm(ModelForm):
    fecha_cierre = forms.TypedChoiceField(
       choices=DAYS_CHOICES, widget=forms.Select)

class Meta:
    models = Story

问题是“1”或“7”不是日期时间对象,我真的不知道在哪里拦截表单提交过程,所以我可以用这样的方式更改值:

datetime.datetime.now() + datetime.timedelta(days=n_days)).strftime('%Y-%m-%d %H:%M:%S')

在这种情况下,首选方法是什么?

1 个答案:

答案 0 :(得分:1)

您需要从表单中排除deadline字段并覆盖save()方法:

class StoryForm(ModelForm):

    fecha_cierre = forms.TypedChoiceField(
       choices=DAYS_CHOICES, widget=forms.Select)

    class Meta:
        models = Story
        exclude = ('deadline',)

    def save(self):
        story = super(StoryForm, self).save(commit=False)
        story.deadline = datetime.datetime.now() + \
                         datetime.timedelta(days=self.cleaned_data['fecha_cierre']))
        story.save()
        return story