【问题标题】:django custom field to_python not called when using .values()使用 .values() 时未调用 django 自定义字段 to_python
【发布时间】:2015-02-14 10:12:37
【问题描述】:

我有一个简单的自定义 PctField,它只是将值乘以 100,或者如果它为空,则将其设置为 0.0。这在我的代码中运行良好,例如:

class PctField(models.FloatField):
    __metaclass__ = models.SubfieldBase

    def __init__(self, *args, **kwargs):
        kwargs['blank'] = True
        kwargs['null'] = True
        super(PctField, self).__init__(*args, **kwargs)

    def to_python(self, value):
        if value is None:
            return 0.

        return value * 100


class TestModel(models.Model):
    id = models.IntegerField(primary_key=True)
    non_pct = models.FloatField(blank=True, null=True)
    pct = PctField()


test = TestModel.objects.get(id=18328)
print test.non_pct, test.pct  # prints 0.900227, 90.0227

test1 = TestModel.objects.filter(id=18328)
print test1[0].non_pct, test1[0].pct  # prints 0.900227, 90.0227

后来在我的代码中,我试图限制我返回的数据,所以我决定开始对结果使用 .values() 并传入我需要的动态字段列表。当我这样做时,我的自定义字段中的 to_python 函数不再被调用。

test2 = TestModel.objects.filter(id=18328)
print test2.values(*['non_pct', 'pct'])[0]  # prints {'non_pct': 0.900227, 'pct': 0.900227}

有没有其他人见过这个?我正在使用 django 1.6.8....

【问题讨论】:

    标签: django python-2.7 django-orm


    【解决方案1】:

    这是一个known issue,但显然在 6 年后仍处于争论之中,这是一个真正的错误还是文档错误。

    【讨论】:

      猜你喜欢
      • 2012-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多