Djang中的组相关对象

2024-05-14 14:34:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在构建一个应用程序,您可以在其中搜索数据库中的对象(假设您搜索的对象是人)。我想做的是将相关对象分组,例如已婚夫妇。换句话说,如果两个人的姓氏相同,我们就假设他们已经结婚了(这不是一个很好的例子,但你可以理解)。姓氏是两个人结婚的唯一标志。 在搜索结果中,我想显示相邻的已婚夫妇,以及所有其他人。你知道吗

假设你搜索“约翰”,这就是我想要的:

John Smith - Jane Smith
John Adams - Nancy Adams
John Washington
John Andersson
John Ryan

然后,每个名字都是指向此人个人资料页面的链接。你知道吗

我现在使用的是一个函数,它查找所有对,并返回一个元组列表,其中每个元组都是一对。问题是,在搜索结果中,一对中的每个名字都列了两次。 我为搜索查询做了一个查询(Person.objects.filter文件(name\uu contains=“John”)),查询结果被发送到match函数。然后将原始queryset和匹配函数结果发送到模板。 我想我可以排除match函数找到匹配的每个人,但我不知道,但这是最有效的解决方案吗?你知道吗

编辑:

正如我在评论中所写的,我想要匹配的实际字符串是不相同的。引用我自己的话:

In fact, the strings I want to match are not identical, instead they look more like this: "foo2(bar13)" - "foo2(bar14)". That is, if two strings have the same foo id (2), and if the bar id is an odd number (13), then its match is the bar id + 1 (14). I have a regular expression to find these matches


Tags: theto对象函数idismatch名字
1条回答
网友
1楼 · 发布于 2024-05-14 14:34:31

首先按姓氏对对象进行排序:

def keyfun(p):
    return p.name.split()[-1]

persons = sorted(Person.objects.all(), key = keyfun)

然后使用groupby:

from itertools import groupby
for lname, persons in groupby(persons, keyfun):
    print ' - '.join(p.name for p in persons)

更新是的,此解决方案也适用于您的新需求。您只需要一种稳定的方法来为每个项目生成密钥,并用它替换keyfun的主体:

from re import findall
def keyfun(p):
    v1, v2 = findall(p.name, '\d+')
    tot = int(v1) + int(v2) % 2
    return tot

您对如何为每个项生成密钥的描述不够清楚,尽管您应该能够通过上面的示例自己解决这个问题。你知道吗

相关问题 更多 >

    热门问题