如何通过共享值查询Django模型

时间:2019-10-23 14:11:00

标签: python django

我有一个用于用户帐户的django模型,其中包含用户的外键和帐户类型的选择字段。看起来像这样:

class Account(models.Model):
    user = models.ForeignKey(User)
    account_type = ChoiceField(models.TextField(
        choices=zip(ACCOUNT_TYPES, ACCOUNT_TYPES)
    )

我现在想为模型添加唯一性,以便每个用户只能为每个类型拥有一个帐户,因此我在具有用户和帐户类型的元数据中添加了unique_together。

不幸的是,此模型已经很老了,并且已经有一个巨大的表,所以我需要查找重复的对象(重复的原因是有多个对象具有相同的user-account_type组合),所以我可以对它们进行处理。 / p>

我的问题是-我如何查询Account表以查找所有重复的实例?我想要类似

“请提供用户和帐户类型与任何其他对象的用户和帐户类型相同的所有对象。”

1 个答案:

答案 0 :(得分:1)

您可以使用annotateCount,类似于:

from django.db.models import Count, Max

Account.objects.values('user', 'account_type')
    .order_by()
    .annotate(max_id=Max('id'), count_id=Count('id'))
    .filter(count_id__gt=1)

恐怕我现在无法测试。