【发布时间】:2018-05-30 16:16:52
【问题描述】:
我有一个带有几条记录的查询集,我不想使用相关的模型字段删除重复项。例如:
class User(models.Model):
group = models.ForeignKey('Group')
...
class Address(models.Model):
...
models.ForeignKey('User')
addresses = Address.objects.filter(user__group__id=1).order_by('-id')
这会返回一个地址记录的 QuerySet,我想按用户 ID 分组。
- 我不能使用
.annotate,因为我需要地址中的所有字段,以及地址和用户之间的关系 - 我不能使用
.distinct(),因为它不起作用,因为所有地址都是不同的,我想要不同的用户地址。
我可以:
addresses = Address.objects.filter(user__group__id=1).order_by('-id')
unique_users_ids = []
unique_addresses = []
for address in addresses:
if address.user.id not in unique_users_ids:
unique_addresses.append(address)
unique_users_ids.append(address.user.id)
print unique_addresses # TA-DA!
但是对于像 group by(该死的 Django)这样简单的事情来说似乎太过分了。
有没有简单的方法来实现这一点?
【问题讨论】:
-
Address和Group有什么关系?我们只看到Address与User相关,而User与分组相关,那么查询不会是user__group__id=1吗? -
完全不相关。
-
此外,我们无法执行
GROUP BY,因为目前还不清楚您将如何“聚合”多个地址。 -
但是
group__id=1查询没有多大意义。 -
最新:
.order_by('-id')