如何在django中选择同一字段的两个范围?

rsaldnfx  于 2021-07-26  发布在  Java
关注(0)|答案(3)|浏览(433)

使用以下型号:

class Event(models.Model):
    latitude = models.FloatField()
    longitude = models.FloatField()

我想执行以下逻辑:
选择纬度在范围(float1,float2)或范围(float3,float4)内的所有事件
在sql中如下所示:

SELECT * FROM event WHERE latitude (BETWEEN float1 and float2) or latitude (BETWEEN float3 and float4);

我在django中尝试了这个方法,但是得到了一个“syntaxerror:关键字参数repeated”:

Events.objects.filter(latitude__range=(float1, float2), latitude__range=(float3, float4)
voase2hg

voase2hg1#

使用q()| q()

from django.db.models import Q
Event.objects.filter(
    Q(latitude__range=(float1,float2)) | Q(latitude__range=(float3,float4))
)

参见文档https://docs.djangoproject.com/zh-hans/2.2/topics/db/queries/#complex-使用q对象查找

jaxagkaj

jaxagkaj2#

如果您想保持您提到的更好的可读性,请尝试以下操作:

SELECT * 
 FROM event 
 WHERE (latitude BETWEEN float1 AND float2) 
 OR (latitude BETWEEN float3 AND float4);```
dohp0rv5

dohp0rv53#

错误是因为 fieldName 介于值1之间 AND value2是唯一语法。实际上你不需要加括号:

SELECT * FROM event 
WHERE latitude BETWEEN float1 and float2 OR 
latitude BETWEEN float3 and float4;

如果要添加括号以提高可读性,可以添加如下内容:

SELECT * FROM event 
WHERE (latitude BETWEEN float1 and float2) OR 
(latitude BETWEEN float3 and float4);

相关问题