我有事务模型和匹配模型,它们具有多对多的字段关系
class Transaction(models.Model):
amount = models.DecimalField(max_digits=16, decimal_places=2)
card_no = CleanTextField(null=True, blank=True)
date = models.DateField()
class Match(models.Model):
match_at = models.DateTimeField(auto_now_add=True)
a_transactions = models.ManyToManyField(Transaction, related_name="a_matches")
b_transactions = models.ManyToManyField(Transaction, related_name="b_matches")
还有内联管理和模型管理
class ATransactionInline(admin.TabularInline):
model = Transaction.a_matches.through
extra = 0
class BTransactionInline(admin.TabularInline):
model = Transaction.b_matches.through
extra = 0
class TransactionAdmin(admin.ModelAdmin):
list_display = ["amount", "date"]
inlines = [ATransactionInline, BTransactionInline]
admin.site.register(Transaction, TransactionAdmin)
因此,在交易管理页面中,会在内联中显示匹配对象 但我需要显示与该匹配对象相关的 a 和 b 事务 有什么解决办法吗?
如果我正确理解你的问题,你可以覆盖每个内联中的
get_queryset
,并过滤你想要的内容:
class ATransactionInline(admin.TabularInline):
model = Transaction.a_matches.through
extra = 0
verbose_name = "A Transaction"
verbose_name_plural = "A Transactions"
def get_queryset(self, request):
queryset = super().get_queryset(request)
return queryset.filter(transaction__in=self.parent_obj.a_matches.all())
class BTransactionInline(admin.TabularInline):
model = Transaction.b_matches.through
extra = 0
verbose_name = "B Transaction"
verbose_name_plural = "B Transactions"
def get_queryset(self, request):
queryset = super().get_queryset(request)
return queryset.filter(transaction__in=self.parent_obj.b_matches.all())
class TransactionAdmin(admin.ModelAdmin):
list_display = ["amount", "date"]
inlines = [ATransactionInline, BTransactionInline]
admin.site.register(Transaction, TransactionAdmin)