我在做一个项目

mt = Model.objects.get(pk=2)
if mt.quantity > 0 and not ModelClass.objects.filter(a=mt.a, b = mt.b, c=mt.c, low__lte=mt.rate).exists():
    ----Do Something
elif mt.quantity < 0 and not ModelClass.objects.filter(a=mt.a, b=mt.b, c=mt.c, high__gte=mt.rate).exists():
   ---Do Same as above

有没有其他的蟒蛇的方法来做这个。
这个问题只是为了学术上的兴趣,因为我的目标是实现上述。
谢谢您。
编辑:
我可以使用它,也可以用于它,但我想知道这是否可以实现在一个紧凑的方式。
编辑2:Model和ModelClass这两个模型没有任何外键关联。

最佳答案

不必在每个子句中重复相同的筛选,最可读的方法可能是:

mt = Model.objects.get(pk=2)
qs = ModelClass.objects.filter(a=mt.a, b = mt.b, c=mt.c)
if mt.quantity > 0 and not qs.filter(low__lte=mt.rate).exists():
    ----Do Something
elif mt.quantity < 0 and not qs.filter(high__gte=mt.rate).exists():
    ---Do Same as above

如果您想使用一些特定于Python的构造,也可以只构造filter()的关键字参数:
kwargs = dict(a=mt.a, b=mt.b, c=mt.c)
if mt.quantity > 0:
    kwargs.update({'low__lte': mt.rate})
if mt.quantity < 0:
    kwargs.update({'high__gte': mt.rate})
if ModelClass.objects.filter(**kwargs).exists():
    # do some stuff

10-07 19:16
查看更多