自定义时间小部件的问题
我有一个模型,它里面有一个属性,用来表示这个对象什么时候不再公开可用。
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 个回答
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