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方法。谢谢你的帮助,功劳是你的。恭喜。