我有一个模型,它具有一个属性,可以引用此对象不再公开的时候。
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')
在这种情况下,首选方法是什么?
答案 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