我用Django编写了应用程序,并使用SQLite对其进行了测试。但现在在生产中,我想使用PostgreSQL,但有一个问题,因为调用:
empty_list = []
Foo.objects.exclude(pk__in=empty_list).delete()
引发编程错误(错误查询-postgres不接受空查询
IN ()
)我不想重写所有代码,并将所有
exclude
s和filter
s包装到检查空列表的方法中。我也不想写一千个if
s或修改Django代码。有什么好的解决办法吗? 最佳答案
好吧,我找到了这个:http://www.tryolabs.com/Blog/2013/07/05/run-time-method-patching-python/
很简单,就这样写:
from django.db.models import QuerySet
def new_exclude(self, *args, **kwargs):
kw = dict()
for key, value in kwargs.items():
if is_not_empty_list(value) and is_not_empty_queryset(value): #other checks?
kw[key] = value
if len(kw):
return old_exclude(self, *args, **kw)
else:
return self
old_exclude = QuerySet.exclude
QuerySet.exclude = new_exclude
但就我个人而言,我不喜欢这个解决方案,所以我不会接受,我正在等待更好的解决方案。
关于django - PostgreSQL-检查空列表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25357740/