django 模型的假反向关系

Ros*_*ote 2 django orm reverse foreign-key-relationship

我有以下代码:

class Transaction(models.Model):
    pass

class Shipment(models.Model):
    tx = models.ForeignKey(Transaction)
    sub = models.ForeignKey(Subscription)


class Subscription(models.Model):
    pass
Run Code Online (Sandbox Code Playgroud)

我正在尝试在订阅和交易之间建立反向关系,如下所示:

subscription.transaction_set.all()
Run Code Online (Sandbox Code Playgroud)

我能想出的唯一方法是使用这样的假属性:

class Subscription(models.Model):

    @property
    def transaction_set(self):
        return Transaction.objects.filter(
            pk__in=[s.tx.pk for s in self.shipment_set.all()]
        )
Run Code Online (Sandbox Code Playgroud)

但是现在我遇到了管理问题。我想在管理站点中使用 admin.TabularInline 列出交易。这是我的解决方案崩溃的地方。有谁有想法吗?

我还需要使用 admin.TabularInline 列出货件。

dan*_*era 5

您正在通过论证寻找形式:

class Transaction(models.Model):
    pass

class Subscription(models.Model):
    transactions = models.ManyToManyField(Transaction, through='Shipment')

class Shipment(models.Model):
    tx = models.ForeignKey(Transaction)
    sub = models.ForeignKey(Subscription)
Run Code Online (Sandbox Code Playgroud)

然后:

subscription.transactions.all()
Run Code Online (Sandbox Code Playgroud)