首页 > 解决方案 > django-queryable-properties 混淆

问题描述

我遇到了 django-queryable-properties 包的问题。
我有这个模型:

class MyModel(Model):
    f1 = CharField()
    f2 = AnnotationProperty(
        annotation=RegexpMatches(source='f1', regexp=MY_REGEXP, group=1)
    )

    objects = QueryablePropertiesManager()

问题是:当我尝试过滤字段时,postgres 抛出错误,f2因为 postgress 不允许 where 子句上的函数。
经过一些研究,我发现该字段f2不在生成的 sql 的选择子句中。
换句话说:当我尝试MyModel.objects.filter(f2='a').first()生成以下 sql 时:

SELECT "myapp_mymodel"."f1"
FROM   "myapp_mymodel"
WHERE  (regexp_matches("myapp_mymodel"."f1", (^m.+)_.+))[1] = 'a'

我的问题是:
如何将 f2 添加到 select 子句中,以便使用 django-queryable-properties 包查找该字段。


更新:

我正在使用Alexandr Shurigin 描述的RegexpMatches类

标签: django

解决方案


推荐阅读