5

一部の日時フィールドには、(標準の完全な日時の値に加えて) 年、または年と月のみを書き込むことができる必要があります。以下のこれらのパターンのように。

YYYY
YYYY-MM
YYYY-MM-DD
YYYY-MM-DD HH
YYYY-MM-DD HH:MM
YYYY-MM-DD HH:MM:SS

mySQL では、これはゼロを使用して簡単に実行できますが、django では機能しません。それをサポートしていないのは、愚かな time.datetime python 関数です。

ジャンゴでこれを行う簡単な方法はありますか? そうでない場合、これを行うことができる拡張機能はありますか? そうでない場合、これを可能な限り最善の方法で解決するにはどうすればよいですか?

それが完全なデータ時間値である場合、ローカル時間のものの正規化を処理できればいいのにと思います。そうすれば、どこでも同じフィールドを使用できます。しかし、それはそれほど重要ではありません。

4

2 に答える 2

10

たぶんこれが役立つでしょう:

DayMonthField と YearField

django-yearlessdate - https://github.com/seddonym/django-yearlessdate

年月フィールド

YEARMONTH_INPUT_FORMATS = (
    '%Y-%m', '%m/%Y', '%m/%y', # '2006-10', '10/2006', '10/06'
)

class YearMonthField(CharField):
    default_error_messages = {
        'invalid': _('Enter a valid year and month.'),
    }

    def __init__(self, input_formats=None, *args, **kwargs):
        super(YearMonthField, self).__init__(*args, **kwargs)
        self.input_formats = input_formats

    def clean(self, value):
        if value in validators.EMPTY_VALUES:
            return None
        if isinstance(value, datetime.datetime):
            return format(value, '%Y-%m')
        if isinstance(value, datetime.date):
            return format(value, '%Y-%m')
        for fmt in self.input_formats or YEARMONTH_INPUT_FORMATS:
            try:
                date = datetime.date(*time.strptime(value, fmt)[:3])
                return format(date, '%Y-%m')
            except ValueError:
                continue
        raise ValidationError(self.error_messages['invalid'])

class MyModel(models.Model):
    yearmonth = YearMonthField() 
于 2013-03-10T17:32:16.583 に答える