0

model.FieldWeekFieldというカスタムを作成しようとしています。データベース フィールドは、8 文字の文字列としてYYYYmmdd. 私はそのために拡張models.CharFieldしました:

class WeekField(models.CharField):
    def __init__(self, *args, **kwargs):
        super(WeekField, self).__init__(max_length=8, *args, **kwargs)

    def to_python(self, value):
        return Week(value)

    def get_prep_value(self, value):
        return value.get_id()

上記のWeekオブジェクトには、日付または形式の文字列のいずれかを取ることができるコンストラクターがありますYYYYmmdd

私の問題は、管理画面でテキスト フィールドとして表示されることです。管理者に日付フィールドのように扱うように強制するにはどうすればよいですか?

これを WeekField クラスに追加しようとしましたが、役に立ちませんでした:

def formfield(self, **kwargs):
        defaults = {'form_class': forms.DateField}
        defaults.update(kwargs)
        return super(models.CharField, self).formfield(**defaults)
4

1 に答える 1

1

代わりにDateFieldをサブクラス化し、データベースに保存するテキスト形式に変換するget_prep_value / to_pythonを提供するとどうなりますか?

https://docs.djangoproject.com/en/dev/howto/custom-model-fields/#django.db.models.Field.get_db_prep_value

于 2012-12-19T18:30:04.667 に答える