在Django中,创建一个自定义model.Field,它存储数据,如CharField,但行为类似于管理中的forms.DateField

时间:2012-12-19 17:32:25

标签: django django-forms django-admin

我正在尝试创建名为WeekField的自定义model.Field。数据库字段必须存储为YYYYmmdd中的8个字符的字符串。我为此扩展了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)

1 个答案:

答案 0 :(得分: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