我试图用这种方式,
models.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)
views.py
def get_old_fathers(request):
father_list = Father.objects.filter(last_child_age__gte=15)
返回:
Cannot resolve keyword
错误。
除了逐个迭代之外,进行此查询的正确方法是什么。
答案 0 :(得分:0)
你还没有发布你的Child模型和last_child_age代码,但这样的事情应该有效:
Child.objects.filter(age__gte=15).prefetch_related('father')
答案 1 :(得分:0)
last_child_age
是方法,而不是列。 ORM查询生成SQL,SQL不知道zilch关于模型方法 - SQL数据库将如何回调Python代码?
答案 2 :(得分:0)
您无法在Django中使用模型类方法(将函数传递给过滤器)进行查询
如果您需要包含年龄> gt的孩子的Father
个对象列表; 15年:
d = datetime.date.today()
father_list = Father.objects.filter(
child__birth_day__lte=datetime.date(d.year-15, d.month, d.day))
在不向Child添加标志的情况下,您可以通过向子表创建子查询来确定哪个是最后的(最小的)。最大生日的注释(最后一个儿子 - >更大的birth_day日期)可以提供帮助。试试这个查询(我不测试它):
from django.db.models import Max
father_list = Father.objects.annotate(max_birthday=Max('child__birth_day')
).filter(max_birthday__lte=datetime.date(d.year-15, d.month, d.day))