gpt4 book ai didi

regex - 如何使用存储在字段值中的正则表达式执行正则表达式查找?

转载 作者:行者123 更新时间:2023-12-04 18:03:08 24 4
gpt4 key购买 nike

给定以下模型:

from django.db import models
from django.conf import settings

class UserMessage(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL)
path = models.CharField(max_length=255)
message = models.TextField()

并给定以下模型实例:

UserMessage.objects.create(
user=request.user,
path='^/dashboard/(.*)+$',
message='Welcome to your dashboard!'
)

我希望能够根据 UserMessage.path 的值执行当前请求路径的查找。这意味着我需要在查询的右侧有“路径”,例如:

SELECT * FROM user_message WHERE '/dashboard/foo/' ~ path;

但是,Django ORM 的正则表达式查找会产生相反的顺序,例如:

SELECT * FROM user_message WHERE path ~ '/dashboard/foo/';

有没有一种方法可以使用 ORM 查找轻松地将其反转为我想要的结果?还是这更适合 .extra() 或自定义查找表达式?

最佳答案

额外的()

UserMessage.objects.extra(where=['%s ~ path'], params=[request.path])

自定义查找

模型.py

from django.db.models import Lookup

@models.CharField.register_lookup
class NotEqual(Lookup):
lookup_name = 'test'

def as_postgresql(self, compiler, connection):
lhs, lhs_params = self.process_lhs(compiler, connection)
rhs, rhs_params = self.process_rhs(compiler, connection)
params = lhs_params + rhs_params
return '%s ~ %s' % (rhs, lhs), params

用法:UserMessages.objects.get(path__test=request.path)

关于regex - 如何使用存储在字段值中的正则表达式执行正则表达式查找?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31688821/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com