【问题标题】:Django admin StackedInline customisationDjango admin StackedInline 自定义
【发布时间】:2011-02-03 19:54:02
【问题描述】:

我有一个带有附加交易的 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. 如何只显示我关心的字段 - user、transaction_type 和 transaction_date - 而隐藏其他字段?

另外:标题当前是“Book History -- Transaction: Transaction object”。如何显示比“交易对象”更友好的内容?

请让我知道这是否应该分成单独的问题!

谢谢。

【问题讨论】:

  • 深入研究源代码,“添加另一个”似乎是 jQuery django formset 工具包的一个功能,并且不容易被忽略。如果你想让这个东西是自定义展示表,为什么不创建一个${TEMPLATE_ROOT}/admin/APPNAME/MODELNAME/change_form.html,扩展“admin/change_form.html”,然后覆盖inline objects块呢?跨度>
  • 将 max_num 设置为 0 会解决这个问题。

标签: python django django-admin


【解决方案1】:
猜你喜欢
  • 1970-01-01
  • 2015-09-17
  • 2012-02-27
  • 2012-03-05
  • 1970-01-01
  • 2012-01-04
  • 2012-03-31
  • 2011-09-16
  • 1970-01-01
相关资源
最近更新 更多