Django admin StackedInline自定义
我有一个用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 个回答
8
1: 将 max_num
设置为 0
http://docs.djangoproject.com/en/dev/topics/forms/modelforms/#model-formsets-max-num
2: 指定 fields
属性
http://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.fields
另外:在你的模型中重写 __unicode__
方法
http://docs.djangoproject.com/en/dev/ref/models/instances/#django.db.models.Model.unicode