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

Web*_*ode 13 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.")
Run Code Online (Sandbox Code Playgroud)

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

因此,当我点击Django管理员中的"添加书籍数量"按钮时,不会显示AmountOfBooks模型的字段.

但是我想从Django管理员那里删除那个按钮,只为AmountOfBooks模型.
怎么做 ?

更新
关于如何在Django Admin中使Django模型只是查看(只读)的问题可以继续吗?

小智 17

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

class MyAdmin(admin.ModelAdmin):
    def has_add_permission(self, request):
        return False
Run Code Online (Sandbox Code Playgroud)

  • 抱歉,是否允许使用其他用户答案的​​“复制和过去”?http://stackoverflow.com/questions/4143886/django-admin-disable-the-add-action-for-a-specific-model#answer-4144088 (2认同)

ndp*_*dpu 7

为此,您需要覆盖has_add_permissionAdmin 类中的方法:

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')
Run Code Online (Sandbox Code Playgroud)

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