Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
django模型的伪逆关系_Django_Orm_Reverse_Foreign Key Relationship - Fatal编程技术网

django模型的伪逆关系

django模型的伪逆关系,django,orm,reverse,foreign-key-relationship,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 我试图在订阅和交易之间建立一种反向关系,如下所示: subscription.tr

我有以下代码:

class Transaction(models.Model):
    pass

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


class Subscription(models.Model):
    pass
我试图在订阅和交易之间建立一种反向关系,如下所示:

subscription.transaction_set.all()
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()]
        )
我能想出的唯一办法就是使用这样的假财产:

subscription.transaction_set.all()
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()]
        )
但现在我遇到了一个管理问题。我想在管理站点中使用admin.TabularInline列出事务。这就是我的解决方案失败的地方。有人知道吗

我还需要使用admin.TabularInline列出装运。

您的“正在查找”表单参数:

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)
然后:


我真不敢相信我错过了。我想,因为在我的头脑中,我已经构建了它,但我没有意识到发货模式已经像一个直通模式。谢谢。我想我可能是匆忙接受了这个答案。关系正常,但我收到以下错误::(admin.E202)“sagepay.Transaction”没有指向“subscription.subscription”的ForeignKey。这与我之前遇到的错误相同。感谢您的建议,但这只列出了中间模型,即装运。我需要以表格形式列出货物和交易。还有什么想法吗?我觉得我们就快到了。好吧,我找到了一个解决办法,使用你的解决方案。我已经将verbose_name='Transaction'添加到我的admin.tablarinline中,并创建了所有返回相关对象属性的fields方法。谢谢你的帮助,功劳是你的。恭喜。