我用Django编写了应用程序,并使用SQLite对其进行了测试。但现在在生产中,我想使用PostgreSQL,但有一个问题,因为调用:

empty_list = []
Foo.objects.exclude(pk__in=empty_list).delete()

引发编程错误(错误查询-postgres不接受空查询IN ()
我不想重写所有代码,并将所有excludes和filters包装到检查空列表的方法中。我也不想写一千个ifs或修改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/

10-10 04:32