我有这些模型:
def Foo(Models.model):
size = models.IntegerField()
# other fields
def is_active(self):
if check_condition:
return True
else:
return False
def Bar(Models.model):
foo = models.ForeignKey("Foo")
# other fields
现在我想查询具有活动Foo的Bar:
Bar.objects.filter(foo.is_active())
我收到错误,例如
SyntaxError at /
('non-keyword arg after keyword arg'
我如何才能做到这一点?
5条答案
按热度按时间q1qsirdb1#
不能查询模型方法或属性。要么在查询中使用其中的条件,要么在Python中使用列表解析或genex进行过滤。
20jt8wwn2#
你也可以使用一个自定义管理器。然后你可以运行这样的东西:
你要做的就是:
看看docs。
i1icjdpr3#
我也有类似的问题:我使用基于类的视图
object_list
,我必须通过模型的方法进行过滤。(将信息存储在数据库中不是一个选项,因为属性是基于时间的,我必须创建一个cronjob和/或... * 没门 *)我的答案是无效的,我不知道它如何在更大的数据上扩展;但是,它工作:
e7arh2l64#
您不能在方法上进行过滤,但是如果Foo上的is_active方法检查Foo上的属性,则可以使用双下划线语法,如
Bar.objects.filter(foo__is_active_attribute=True)
jjjwad0x5#
显然,正如伊格纳西奥所指出的那样,您不能在视图中查询模型方法,而是在视图中应用所需的过滤器逻辑。
例如,当
check_condition
是日期范围时: