使用Django ORM获取随机记录

时间:2017-05-06 12:34:00

标签: sql django-models orm

我需要帮助转换这个原始的SQL查询:

Hotels.objects.raw('SELECT * FROM HotelAPP_hotels WHERE City = %s ORDER BY RAND() LIMIT 1',[City]);

2 个答案:

答案 0 :(得分:0)

明确而快速的解决方案就是这样做。

Hotels.objects.filter(City = City).exclude(id = id).order_by('?')[:1]

order_by('?')随机排序您的查询集。

答案 1 :(得分:-1)

似乎已经弄明白了

获取一个按列过滤的查询集,在我的案例中为city。在我的情况下,我也从这一组中排除了原来的酒店。

NearbyHotels = Hotels.objects.filter(City = City).exclude(id = id)

命名列表

Nearbyid = []

将每个检索到的对象的ID添加到列表

for Hotel in NearbyHotels:
        Nearbyid.append(Hotel.id)

选择随机ID

randomid = random.choice(Nearbyid)

检索与随机ID匹配的单个对象

Recommendation = Hotels.objects.get(id = randomid)

这就是我在同一个城市拉随机酒店的原因。