如何删除Django管理员中的添加按钮,具体模型?

时间:2013-11-30 06:27:27

标签: python django django-models django-admin

我有Django模型“AmountOfBooks”,它仅用作Book模型的平衡 如果这不是数据库建模的好模式,那就这么说吧。

无论如何AmountOfBooks有两个字段:

class AmountOfBooks(models.Model):
    book     = models.ForeignKey(Book, editable=False)
    amount   = models.PositiveIntegerField(default=0, editable=False, help_text="Amount of book.")

它们设置为editable = False,因为此模型只能由代码编辑  例如。当书籍被创建时,AmountOfBooks中该书籍的对象被设置为0,并且当添加书籍或取得平衡时,可以增加或减少余额。

因此,当我点击Django admin中的“添加书籍数量”按钮时,不会显示AmountOfBooks模型的字段。

但我想从Django管理员那里删除AmountOfBooks模型中的那个按钮 怎么做?

更新
How to make Django model just view (read-only) in Django Admin?

可以继续提出这个问题

3 个答案:

答案 0 :(得分:17)

很简单,只需在Admin类中重载has_add_permission方法,如下所示:

class MyAdmin(admin.ModelAdmin):
    def has_add_permission(self, request):
        return False

答案 1 :(得分:4)

要执行此操作,您需要覆盖Admin类中的has_add_permission方法:

class AmountOfBooksAdmin(admin.ModelAdmin):
    def has_add_permission(self, request):
        return False

    # to disable editing for specific or all fields
    # you can use readonly_fields attribute
    # (to see data you need to remove editable=False from fields in model):
    readonly_fields = ('book', 'amount')

文档:https://docs.djangoproject.com/en/dev/ref/contrib/admin/

答案 2 :(得分:1)

你问过你的设计本身,所以我先解决这个问题。如果你想保留你的股票的历史,那么拥有一个独特的表(模型)是有道理的,但是你需要一个时间戳字段和一个独特的约束(书,时间戳)。现在,如果您只想保持库存流量,那么账面和金额之间的关系实际上是一对一的,因此金额字段实际上属于账面表。在这种情况下,您只需在书的ModelAdmin“readonly_fields”属性中添加“amount”即可解决问题。