在Djang中使用类方法进行查询

2024-04-18 17:29:19 发布

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

我想用这种方式

在模型.py在

class Father(models.Model):
      name = models.CharField(...)

      def last_child_age(self):
          children = self.child.order_by('-pk')
          if len(children) > 0:
             return find_Year(datetime.datetime.now()-children[0].birth_day) 
          return -1


class Child(models.model):
          father = models.ForeignKey(Father, related_name='child')
          birth_day = models.DateTimeField(auto_now_add=True)

在视图.py在

^{pr2}$

退货:

   Cannot resolve keyword 

错误。在

除了一个接一个地迭代之外,什么是进行此查询的正确方法。在


Tags: namepy模型selfchilddatetimereturnmodels
3条回答

您还没有发布您的孩子模型和上一个孩子的年龄代码,但类似这样的东西应该可以工作:

Child.objects.filter(age__gte=15).prefetch_related('father')

不能在Django中使用模型类方法(将函数传递到filter)进行查询

如果您需要Father对象的列表,这些对象的子对象年龄大于15岁:

d = datetime.date.today()
father_list = Father.objects.filter(
    child__birth_day__lte=datetime.date(d.year-15, d.month, d.day))

在不向子表添加标志的情况下,您可以通过对子表进行子查询来决定哪个是最后一个(最年轻的)。带有max birthday(最后一个儿子->更大的出生日期)的注释可以帮助您。尝试此查询(我不测试):

^{pr2}$

last_child_age是一个方法,而不是一个列。ORM查询生成SQL,而SQL对您的模型方法一无所知—SQL数据库如何调用您的Python代码?在

相关问题 更多 >