可以在所有查询集中添加其他字段吗? Django的

时间:2017-12-12 19:50:55

标签: python django django-models lambda django-queryset

我在模型中有一个querysets,例如

class ModelA(models.Model):
    name = models.Charfield(max_length=256)
    ageMin = models.IntegerField(null=True, blank=True)
    ageMax = models.IntegerField(null=True, blank=True)

    def age(self):
      low = self.ageMin
      high = self.ageMax
      if low and high:
          return str(low) + ' - ' + str(high)
      if low:
          return str(low)
      if high:
        return str(high)

让我们说我有一个查询集来获取ModelA的所有回报 我实际上想在所有查询集中添加一个字段,例如名为age_gap的字段,它是模型本身的def age,因此每个查询集还将有一个名为gap_gap的额外字段,而不仅仅是{ {1}}

我尝试了类似下面的内容,但没有工作。

name, ageMin, ageMax

上述不起作用

所以我想尝试类似的东西     对于all_q中的q:         q [' age_gap'] = q.age()

当然这也给了我错误

有人可以告诉我如何做到这一点吗?

提前致谢

1 个答案:

答案 0 :(得分:2)

您可以使用@property@cached_property

class ModelA(models.Model):
    name = models.Charfield(max_length=256)
    ageMin = models.IntegerField(null=True, blank=True)
    ageMax = models.IntegerField(null=True, blank=True)

    def age(self):
      low = self.ageMin
      high = self.ageMax
      if low and high:
          return str(low) + ' - ' + str(high)
      if low:
          return str(low)
      if high:
        return str(high)

    @property
    def age_gap(self):
        return self.age()