如何编写 Django 查询以获取链接到另一个对象的不同对象?

How do I write a Django query to get distinct objects linked to another object?

我正在使用 Python 3.9 和 Django 3.2。我有这个 class,它有一个字段用于另一个 ...

class Transaction(models.Model):
    ...

    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    account = models.ForeignKey('Account', on_delete=models.CASCADE)

我想获得一组不同的帐户对象,链接到某些交易。所以我尝试了这个

class TransactionManager(models.Manager):
    def get_accounts_with_pending_transactions(self):
        """
        Returns acounts with pending transactions
        """
        return Transaction.objects.filter(status=Transaction.Status.PENDING).values("account").annotate(n=models.Count("pk"))
...

但是,上面的内容似乎是 return 与对象相对的字典列表。因此,我无权访问我的帐户对象中的所有字段。有没有什么方法可以编写查询来获取帐户对象,以便它们已经作为实际对象被水合?

我会使用反向关系,首先编辑您的模型:

class Transaction(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    account = models.ForeignKey('Account', related_name='transactions', on_delete=models.CASCADE)

然后你可以写这个查询:

accounts_with_pending_transactions = Account.objects.filter(transactions__status=Transaction.Status.PENDING).distinct()

我会将该查询放在 AccountManager 的方法中,因为查询:“具有待处理交易的帐户”自然与帐户相关联,而不是与交易相关联。