gpt4 book ai didi

django - values_list 在自定义模型字段中不使用 to_python?

转载 作者:行者123 更新时间:2023-12-01 02:39:27 35 4
gpt4 key购买 nike

我似乎偶然发现了 Django 自定义模型字段中的一个怪癖。我有以下自定义模型字段:

class PriceField(models.DecimalField):
__metaclass__ = models.SubfieldBase

def to_python(self, value):
try:
return Price(super(PriceField, self).to_python(value))
except (TypeError, AttributeError):
return None

def get_db_prep_value(self, value):
return super(PriceField, self).get_db_prep_value(value.d if value else value)

def value_to_string(self, instance):
return 'blah'

这应该总是返回python中的自定义Price类。这按预期工作:
>>> PricePoint.objects.all()[0].price
Price('1.00')

但是,当以 values_list 的形式检索价格时,我会得到小数:
>>> PricePoint.objects.all().values_list('price')
[(Decimal('1'),)]

然后,如果我将 DB 类型更改为 foat 并再次尝试,我会得到一个浮点数:
>>> PricePoint.objects.all().values_list('price')
[(1.0,)]
>>> type(PricePoint.objects.all().values_list('price')[0][0])
<type 'float'>

这让我认为 values_list 根本不依赖于 to_python 而只是返回数据库中定义的类型。那是对的吗?有没有办法通过 values_list 返回自定义类型?

最佳答案

回答了我自己的问题:这显然是一个 Django 错误。 values_list 不会反序列化数据库数据。

正在此处跟踪:https://code.djangoproject.com/ticket/9619并且正在等待设计决定。

关于django - values_list 在自定义模型字段中不使用 to_python?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8891099/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com