我正在执行以下查询:

People.objects.filter(
    Q(name__icontains='carolina'),
    Q(state__icontains='carolina'),
    Q(address__icontains='carolina'),
)[:9]


我希望查询的第一个结果是名为“ Carolina”的人(并且也匹配其他字段,但要先命名)。问题是我认为没有任何方法可以确定字段“权重”或“优先级”。

任何想法?
谢谢!

最佳答案

您需要执行3个查询才能使其正常工作:

names_match = People.objects.filter(name__icontains='carolina')[:9]
states_match = People.objects.filter(state__icontains='carolina')[:9]
addresses_match = People.objects.filter(address__icontains='carolina')[:9]

all_objects = list(names_match) + list(states_match) + list(addresses_match)
all_objects = all_objects[:9]


这种方法有两个问题,很容易解决:


它执行不必要的查询(names_match是否已经包含足够的项目)。
它允许重复(如果北卡罗来纳州的某人称为卡罗来纳州,该怎么办?)

10-07 15:59