返回方法的结果查询集值()或值\u list()?

2024-09-24 00:34:50 发布

您现在位置:Python中文网/ 问答频道 /正文

在查询集上调用.values()或.values\u 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以供使用,而不是每次都调用服务器来检索它。你知道吗

假设上述(或类似的)是不可能的,我知道我可以循环我的values()结果,然后手动添加额外的信息。。最有效(最干净)的方法是什么?你知道吗


Tags: 方法name模型信息model定义modelsdef
1条回答
网友
1楼 · 发布于 2024-09-24 00:34:50

您可能想尝试使用^{}而不是values()。与values()类似,它只从数据库中获取指定的字段,但与values()不同,它将返回您可以调用方法的实际实例对象。你知道吗

这样,无论是在视图中循环还是在模板中循环,都可以访问指定字段之外的方法。你知道吗

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

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

相关问题 更多 >