【发布时间】:2023-03-16 22:40:01
【问题描述】:
给定以下 Django 模型:
class Room(models.Model):
name = models.CharField(max_length=20)
class Beacon(models.Model):
room = models.ForeignKey(Room)
uuid = models.UUIDField(default=uuid.uuid4)
major = models.PostiveIntegerField(max_value=65536)
minor = models.PositiveIntegerField(max_value=65536)
Beacon 模型是与房间的蓝牙信标关系。
我想选择与给定uuid, major, minor 组合匹配的所有房间。
关键是,我想通过离我最近的信标订购房间。因此,我需要能够为每个信标动态分配一个值,然后按它进行排序。
这可以用 Django ORM 实现吗?在 Django 1.8 中?
注意 - 我会事先知道信标的顺序,我将使用它们在查询字符串中传递的顺序。因此传递的第一个信标(uuid、major、minor)应该与 Room QuerySet 返回的第一个房间相匹配
我正在设想这样的事情,虽然我知道这行不通:
beacon_order = [
beacon1 = 1,
beacon0 = 2,
beacon3 = 3,
]
queryset = Room.objects.annotate(beacon_order=beacon_order).\
order_by('beacon_order')
【问题讨论】:
-
通过注释可能是的。但是你会如何在这里定义 nearest 呢? “位置”存储在数据库中的什么位置?
-
它将由传递给函数的参数的顺序决定。所以我会在查询时知道最近的一个,我只是不知道如何告诉 ORM 订单
-
你的 beacon_order 是有序列表,还是带有键值对的字典?您现在拥有列表的方式不是有效的 Python 语法,所以我试图弄清楚它应该是什么意思。
-
beacon_order可以是使注释工作所需的任何内容。
标签: django django-orm