0

我有这样的查询:

blah = Blah.objects.filter(foo=title)

它工作正常,所以我可以在模板中使用结果。但是,我需要将其中的一个值从整数更改为 timedelta,以便在模板输出中显示时间。在执行此操作时遇到困难,我想知道为什么键入结果是 & 发现type(blah),告诉我它是一个 NoneType,即使它实际上具有可用的值。这非常令人费解,我在 Django 文档中找不到任何关于此的内容。

我尝试使用blah['length'], 来获取我的特定整数,但这没有用。所以看起来类型不是字典、集合或列表。

那么,Django 查询结果是什么类型,为什么它告诉我它是 NoneType 即使它不是?

我真的在这个问题上摸不着头脑。

4

1 回答 1

0

Django 查询集有它们自己的类型。他们的想法是检索对象集,并为此提供 Django 的公共查询集 API ( docs )。因此,更改任何查询集属性可能不是一个好主意,因为不能保证未来的 Django 版本将具有相同的属性。但是,您可以更改它们返回的模型实例的属性:

qs = FooModel.objects.all()
for model in qs:
    model.attr = 'foo'

因此,在您的情况下,您可以执行以下操作:

# assuming you allow your integer field to be null
class FooModel(models.Model):
    time = models.IntegerField(null=True)

qs = FooModel.objects.all()
for model in qs:
    # handle case when time is null - model.time will be None
    t = model.time or 90
    model.time = timedelta(seconds=t)

但是,如果您只需要检索一个对象(模型实例),那么您可能应该使用getqueryset 方法而不是filter

foo = FooModel.objects.get(...)
foo.time = timedelta(seconds=foo.time)
于 2013-04-03T23:13:23.303 回答