我正在尝试确定如何构造查询。我有两个来自外部数据库的模型,我正试图将它们导入到不同的模式中。源数据有三个模型:
class Group(model):
...
name = models.CharField()
class Person(model):
...
name = models.CharField()
class Membership(model):
...
status = models.CharField()
created_date = models.DateTimeField()
modified_date = models.DateTimeField()
person = models.ForeignKey(
'Person',
related_name='memberships',
)
group = models.ForeignKey(
'Group',
related_name='memberships',
)
在Memberships中,我有表示person和band的字段,包括create dates和update dates,以及其他相关数据。你知道吗
问题是:成员资格行没有任何表示规范记录的字段,它们混合并匹配人员、日期和其他数据。你知道吗
我现在正在做的是获取给定乐队的所有成员资格,对乐队和个人的组合运行distinct,并使用这些结果再次查询每个特定组合的最新实例的成员资格。虽然这个工作,正如你可能想象的是,是难以形容的缓慢,我知道一定有更好的办法。你知道吗
所以我在寻找如何使用一些高级django查询表达式(Window?结束,F表达式?)在数据库中尽可能多地完成这项工作。你知道吗
以下是获取所需记录的代码:
groups = (the groups I want)
for group in groups:
unique_members = group.members.values(
'person',
'group',
).distinct()
for member in members:
current_member = group.members.filter(
person__id=member['person'],
group__id=member['structure'],
).lastest('created_date', 'modified_date')
current_member
是该唯一个人/组组合的最新成员资格条目。你知道吗
对于这样的会员名单:
Person Group Created Status
John Lennon Beatles 1960-01-01 Current
Paul McCartney Beatles 1960-01-01 Current
Pete Best Beatles 1960-01-01 Expired
George Harrison Beatles 1960-01-01 Current
Ringo Starr Beatles 1962-01-01 Expired
Pete Best Beatles 1964-01-01 Expired
Ringo Starr Beatles 1966-01-01 Current
我想要下列清单:
John Lennon Beatles 1960-01-01 Current
Paul McCartney Beatles 1960-01-01 Current
Pete Best Beatles 1964-01-01 Expired
George Harrison Beatles 1960-01-01 Current
Ringo Starr Beatles 1966-01-01 Current
从单个查询生成。你知道吗
谢谢!你知道吗
您可以首先按所需条目对成员查询进行排序,然后获得distict值。这个问题可以帮助您:
Django query: get the last entries of all distinct values by list
相关问题 更多 >
编程相关推荐