自定义时间小部件的问题 [英] Problems with custom time widget

查看:133
本文介绍了自定义时间小部件的问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

  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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆