自定义时间小部件的问题 [英] Problems with custom time widget
问题描述
class Story( model.Model):
...
deadline = models.models.DateTimeField()
我想要做的是向用户呈现设置此日期的可能性,但是以一种非常简单的方式和限制的方式。我可以选择1-7天的活跃期。所以我现在正在做的是设置一个这样的自定义表单:
DAYS_CHOICES =(
('1 ','1天')
...
('7','7天'),
)
class StoryForm(ModelForm) b $ b fecha_cierre = forms.TypedChoiceField(
choices = DAYS_CHOICES,widget = forms.Select)
class Meta:
models = Story
问题是'1'或'7'不是datetime对象,我真的不知道截取表单提交过程的位置,所以我可以改变这样的值:
datetime.datetime.now()+ datetime.timedelta(days = n_days)) .strftime('%Y-%m-%d%H:%M:%S')
在这种情况下,首选方法是什么?
您需要排除 code>表单中的字段,并覆盖
save()
方法:
class St oryForm(ModelForm):
fecha_cierre = forms.TypedChoiceField(
choices = DAYS_CHOICES,widget = forms.Select)
class Meta:
models =
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
I have a model that has an attribute that referrers to when this object wont be publicly available anymore.
class Story(models.Model):
...
deadline = models.models.DateTimeField()
What I want to do is present to the user the possibility to to set this date but in a very easy way and restricted way. I´ll give the choice of 1-7 days of "active period". So what I´m doing right now is setting a custom form like this:
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
The problem is '1' or '7' are not datetime objects and I really don´t know where to intercept the form submit process so I can change the value with something like this:
datetime.datetime.now() + datetime.timedelta(days=n_days)).strftime('%Y-%m-%d %H:%M:%S')
What is the preferred approach in this kind of situation?
You need to exclude deadline
field from the form and override save()
method:
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
这篇关于自定义时间小部件的问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!