2012-12-19 50 views
0

我試圖創建一個名爲WeekField的自定義model.Field。數據庫字段必須存儲爲YYYYmmdd中的8個字符的字符串。我已經爲該擴展models.CharField在Django中,創建一個自定義model.Field,它像CharField那樣存儲數據,但其行爲像管理員中的forms.DateField

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

如果你繼承的DateField,而不是提供一個get_prep_value/to_python它轉換爲要在數據庫中存儲的文本格式?

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

+0

ORM知道將它視爲字段而不是日期字段嗎? –

+0

我試圖讓我的自定義字段子類'DateField'。即使我的get_prep_value返回一個String,Django也會在DB中將該字段設置爲Date。我想我會沿着這條路線走,因爲數值並不一定是DB中的字符串。 –

相關問題