我有一個自定義模型字段YearWithSurenessField
,它在python中由自定義數據類型YearWithSureness
表示。 YearWithSureness
的構造函數是YearWithSureness(year='', is_certain=False)
,其中year
是''
或四位數年份(作爲字符串),並且is_certain
是一個布爾值,代表我是否確定給定的一年是正確的。這種類型的模型字段以年/ is_certain的形式存儲在我的數據庫中,例如, 「2008/True」,「2011/False」,「/ False」等。爲自定義Django模型字段定製字段查找功能
作爲示例,在Member
模型中,我有一個字段grad_year = YearWithSurenessField(...)
,它存儲了成員的畢業年份以及我是否知道確定我存儲的年份是正確的。
我想什麼,能夠做的是使用像
Member.objects.filter(grad_year__year=2011)
收穫的人,其grad_year要麼是「2011 /真」或「2011 /假」所有成員的QuerySet
。同樣,我希望能夠使用像
Member.objects.filter(grad_year__range=(2000, 2011))
收穫的人,其grad_year是在2000年的範圍內通2011不論是否grad_year.is_certain
是真還是假所有成員的QuerySet
。
這可能嗎?我知道我可以使用Member.objects.filter(grad_year__contains =「2011」)來獲得第一個結果,但我希望能夠使用__year。
我這裏還有相關的類,修剪外來代碼:
class YearWithSureness(object):
def __init__(self, year='', is_certain=False):
# ...
def __str__(self):
return "{year}/{is_certain}".format(year=self.year,
is_certain=self.is_certain)
class YearWithSurenessField(models.Field):
__metaclass__ = models.SubfieldBase
def __init__(self, *args, **kwargs):
# ...
def to_python(self, value):
# ...
def get_prep_value(self, value):
# ...
def get_prep_lookup(self, lookup_type, value):
if lookup_type in ('month', 'day'):
raise TypeError('Lookup type {0} not supported.'.format(lookup_type))
else:
return super(YearWithSurenessField, self).get_prep_lookup(lookup_type, value)
def value_to_string(self, obj):
# ...
您應該只使用接受ranges參數的自定義管理器。 – 2011-05-14 01:11:15