假设我有一个带有邮政编码字段的地址模型.我可以用以下行查找邮政编码以"123"开头的地址:

Address.objects.filter(postcode__startswith="123")

现在,我需要做这个搜索"相反的方向".我有一个带有POSTCODE_PREFIX字段的地址模型,我需要检索POSTCODE_PREFIX是给定代码的前缀的所有地址,比如"12345".因此,如果我的数据库中有两个邮政编码_前缀分别为"123"和"234"的地址,则只会返回第一个地址.

比如:

Address.objects.filter("12345".startswith(postcode_prefix)) 

问题是这不起作用.

Address.objects.filter(postcode_prefix__startswith="12345"[0])

然后,当我得到结果时,列出一个正确过滤它们的列表,如下所示:

results = [r for r in results if "12345".startswith(r.postcode_prefix)]

在Django 有更好的方法吗?

推荐答案

在sql术语中,您要实现的内容如下所示(‘12345’是您要搜索的邮政编码):

SELECT *
FROM address
WHERE '12345' LIKE postcode_prefix||'%'

这不是一个真正的标准查询,我认为在Django中仅使用get()/filter()无法实现这一点.

但是,Django提供了一种方法来提供附加的SQL子句,其中包含extra():

postcode = '12345'
Address.objects.extra(where=["%s LIKE postcode_prefix||'%%'"], params=[postcode])

请参阅Django documentation on extra()号以作进一步参考.还要注意,额外的内容包含纯SQL,因此您需要确保该子句对您的数据库有效.

希望这对你有用.

Django相关问答推荐

Django中的设计用户类

使用序列化器获取Django ORM auth_user. id数据

其中实际的数据库提取在DRF list()中完成

Django测试:如何模拟Django_apps.get_Model()的LookupError

Templatetag 在 Django 4.2 模板 IF 条件中不起作用

Django: 无法将我的 comments 关联到特定产品

无法迁移,模型中的外键导致了问题

如何使用 matplotlib 在绘图的角落插入小图像?

何时在 django 中使用 pre_save、save、post_save?

如何在 Django 视图中获取 URL 参数?

获取 Django 中的缓存键列表

用于测试文件下载的 Django 单元测试

测试 Django ModelForm 是否有实例

用户组和权限

使用 XMLHttpRequest 提示下载文件

如何在 Django 中向 ChoiceField 添加class?

如何动态检索 Django 模型类?

Django REST Framework - 序列化可选字段

AWS Cognito 作为网站的 Django 身份验证后端

左加入 Django ORM