覆盖清理方法以清除自定义日期字段,以便它可以接受仅月/年或仅年份日期数据

时间:2014-06-06 14:46:31

标签: python django

我想以下列形式之一显示和保存日期数据:

  • 年 - 月 - 日
  • 年月

为实现这一目标,我有以下模型结构:

我有Model以下结构

CHOICES = [
    (0, "Year/Month/Date"),
    (1, "Year/Month"),
    (2, "Year"),
]

class MyModel(Model):
    my_date = Models.DateField(...)
    my_date_format = Models.SmallIntegerField(choices=CHOICES)

ModelForm

class MyForm(ModelForm):
    class Meta:
    model = MyModel
    widgets = {"my_date": SelectDateWidget(required=False), }

我的逻辑如下:

  • 如果用户设置日,月和年;然后按原样保存日期并将my_date_format设置为0。
  • 如果用户设置月份和年份(假日空白);然后我将日期设置为1并将my_date_format设置为1,因此我将在之后忽略my_date数据的日期部分。
  • 如果用户设置年份(请假日期和月份为空白);然后我将日期和月份设置为1并将my_date_format设置为2,因此我将在之后忽略my_date数据的日期和月份。

我的问题是表单验证。 SelectDateWidget需要验证日期并将其强制转换为python datetime.date,但我需要发布数据以检查哪个字段为空以设置my_date_format值。

我必须将日期数据保存为date到我的数据库,以便我可以正确查询。

我应该如何覆盖form.clean()方法?

1 个答案:

答案 0 :(得分:0)

我会尝试这样的事情。

免责声明:未经测试但可能会为您提供想法。

def clean(self):
    cleaned_data = super(MyForm, self).clean()

    # Check the my_date_format value here
    ...

    # Then generate appropriate datetime according your own rules
    my_datetime = ...

    # Add datetime to the cleaned_data dictionnary
    cleaned_data['my_date'] = my_datetime

    return cleaned_data