我正在执行以下查询:
People.objects.filter(
Q(name__icontains='carolina'),
Q(state__icontains='carolina'),
Q(address__icontains='carolina'),
)[:9]
我希望查询的第一个结果是名为“Carolina”的人(并且还匹配其他字段,但名称在前)。问题是我认为没有任何方法可以确定字段“权重”或“优先级”。
任何想法?谢谢!
我正在执行以下查询:
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
已经包含足够的项目怎么办)。这应该有效:
qs = People.objects.filter(name__icontains='carolina') | People.objects.filter( Q(state__icontains = 'carolina'), Q(address__icontains='carolina')).distinct()
qs = list(qs)[:9]
或者,如果您想要一个纯粹的重复空闲列表:
qs = list(set(qs))[:9] #for a duplicate free list