在QuerySet.values()或values_list()中返回方法的结果?

时间:2014-07-06 03:41:09

标签: javascript python django

在QuerySet上调用.values()或.values_list()时,您可以传入要返回的特定字段,甚至可以传递相关表中所需的字段。除了某些字段之外,我想要做的是包括模型上定义的方法的结果,例如:

class MyModel(models.Model):

    name = models.CharField()

    def favouriteNumber(self):
        return random.randint(1,10)

list(MyModel.objects.all().values('name','favouriteNumber'))
=> [{'name':'Bob', 'favouriteNumber':6}, {'name':'Fred', 'favouriteNumber':4}]

上面的方法不起作用,但是我想要做的事情,就像模板语言可以像没有字段一样处理没有参数的模型方法一样。

我之所以这样做,是因为我可以将信息传递给前端的JavaScript,而不是每次都回调服务器来检索它。

假设以上(或类似的东西)不可能,我知道我可以循环我的值()结果并手动添加额外的信息..什么是最有效(和干净)的方法是什么?

1 个答案:

答案 0 :(得分:1)

您可能想尝试使用only()代替values()。与values()类似,它只会从数据库中获取指定的字段,但与values()不同,它将返回可以调用方法的实际实例对象。

这样,无论您是在视图还是模板中循环,除了指定的字段外,您还可以访问该方法。

如果您需要类似字典的结构(例如json.dumps()),您可以在理解中构建它们:

instances = MyModel.objects.only('name')
data = [{'name': instance.name, 
         'favourite': instance.favouriteNumber()} for instance in instances]