我如何 select Django 中同一字段的两个范围?
How can I select two ranges of the same field in Django?
使用以下模型:
class Event(models.Model):
latitude = models.FloatField()
longitude = models.FloatField()
我想执行以下逻辑:
Select 纬度在范围 (float1, float2) 或范围 (float3, float4) 内的所有事件
在 SQL 中看起来像这样:
SELECT * FROM event WHERE latitude (BETWEEN float1 and float2) or latitude (BETWEEN float3 and float4);
我在 Django 中试过了,但我得到了 "SyntaxError: keyword argument repeated":
Events.objects.filter(latitude__range=(float1, float2), latitude__range=(float3, float4)
如果你想保持你提到的更好的可读性,试试这个:
SELECT *
FROM event
WHERE (latitude BETWEEN float1 AND float2)
OR (latitude BETWEEN float3 AND float4);```
错误是因为 fieldName
BETWEEN value1 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);
使用 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-lookups-with-q-objects
使用以下模型:
class Event(models.Model):
latitude = models.FloatField()
longitude = models.FloatField()
我想执行以下逻辑:
Select 纬度在范围 (float1, float2) 或范围 (float3, float4) 内的所有事件
在 SQL 中看起来像这样:
SELECT * FROM event WHERE latitude (BETWEEN float1 and float2) or latitude (BETWEEN float3 and float4);
我在 Django 中试过了,但我得到了 "SyntaxError: keyword argument repeated":
Events.objects.filter(latitude__range=(float1, float2), latitude__range=(float3, float4)
如果你想保持你提到的更好的可读性,试试这个:
SELECT *
FROM event
WHERE (latitude BETWEEN float1 AND float2)
OR (latitude BETWEEN float3 AND float4);```
错误是因为 fieldName
BETWEEN value1 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);
使用 Q()|Q()
from django.db.models import Q
Event.objects.filter(
Q(latitude__range=(float1,float2)) | Q(latitude__range=(float3,float4))
)