簡體   English   中英

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

[英]Return the result of a method in a QuerySet.values() or values_list()?

在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以供使用,而不必每次都調用服務器來檢索它。

假設以上(或類似內容)是不可能的,我知道我可以在之后遍歷我的values()結果並手動添加額外的信息。什么是最有效(最簡潔)的方法?

您可能想嘗試使用only()而不是values() values()一樣,它只會從數據庫中獲取指定的字段,但是與values()不同的是,它將返回可以調用方法的實際實例對象。

這樣,無論您是在視圖中還是在模板中循環,都可以訪問指定方法之外的方法。

如果您需要類似字典的結構(例如json.dumps() ,則可以以一種理解的方式構造它們:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM