【问题标题】:Problems with custom time widget自定义时间小部件的问题
【发布时间】:2011-08-02 16:01:07
【问题描述】:

我有一个模型,它有一个属性,当这个对象不再公开可用时,引用该属性。

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')

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

【问题讨论】:

    标签: python django forms widget


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 2012-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多