我在做一个项目
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