Django:过滤("纬度,经度")字段

0 django geolocation

我将纬度和经度存储为像("纬度,经度")的字段.我更喜欢这样做.

我需要过滤结果以仅显示纬度> w,纬度<x,经度> y,经度<z.

我怎么能这样做而不改变我如何存储lat,多久?

Lan*_*ney 5

Django ORM无法帮助您过滤该字段.您的架构设计不适合您正在尝试的查询类型.

我的建议:

  • 修改架构以使用单独的数字列开头.(我知道你是专门寻找避免这种情况的选项,但它仍然是正确的解决方案).

  • 添加两个新的数字列,并在对模型进行更改时更新/设置这些列.您还需要进行一次性批量更新,以设置所有现有行的初始值.

  • 您可以装备一个自定义SQL查询,该查询将遍历每一行并拆分列以检索纬度和经度的单独数值并对其进行过滤.在这种情况下,你几乎绕过ORM并直接转向SQL,并且需要使用数据库中可用的任何拆分方法(自定义拆分函数,正则表达式等).查询会很慢.

  • 向模型添加一个方法,该方法将在Python中拆分字符串并返回数字数据.要进行任何类型的过滤使用此数据,您需要从数据库中提取所有模型(昂贵)并在内存中进行过滤(快速但您将失去SQL和/或ORM的优势).此选项可能无法很好地扩展.

祝好运...