Django admin StackedInline自定义

5 投票
1 回答
22923 浏览
提问于 2025-04-16 11:10

我有一个用Django做的书籍数据库,里面有一些交易记录。在管理界面上,我想在每本书的页面上显示与这本书相关的交易记录。

理想情况下,这些交易记录应该是只读的,也就是说,不能添加或删除交易记录。我只想显示一些特定的字段。

models.py 文件中:

class Book(models.Model):
    title = models.CharField(max_length=400)
class Transaction(models.Model):
    id = models.IntegerField(primary_key=True)
    book = models.ForeignKey(Book)
    user = models.ForeignKey(User)
    transaction_type = models.IntegerField(choices=TRANSACTION_TYPES)
    ipaddress = models.IPAddressField(null=True, blank=True)
    transaction_date = models.DateTimeField()
    date_added = models.DateTimeField(auto_now_add=True) 
    class Meta:
        get_latest_by = 'transaction_date'
        ordering = ('-transaction_date',)

admin.py 文件中:

class TransactionInline(admin.StackedInline):
    model = Transaction
    readonly_fields = ['user', 'transaction_type', 'transaction_date']
    verbose_name = 'Transaction'
    verbose_name_plural = 'Book history'
class BookAdmin(admin.ModelAdmin):
    fieldsets = [ (None, {'fields': ['title'}) ]
    inlines = [ TransactionInline, ]

我有几个问题,都是关于交易记录本质上是只读的这件事。

  1. 我该如何禁用“添加新交易”的链接?
  2. 我该如何只显示我关心的字段——用户、交易类型和交易日期,并隐藏其他字段?

另外:现在的标题是“书籍历史 -- 交易:交易对象”。我该如何显示一个更友好的名称,而不是“交易对象”?

如果这些问题应该分开提问,请告诉我!

谢谢。

1 个回答

撰写回答