Как удалить кнопку "Добавить" в администраторе Django для конкретной модели?

У меня есть модель Django "AmountOfBooks", которая используется как баланс для модели книг.
Если это не очень хороший шаблон для моделирования базы данных, просто скажите это.

В любом случае AmountOfBooks имеет два поля:

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

Они настроены на редактирование = False, потому что эта модель предназначена для редактирования только кодом.
 Например. когда книга создается для объекта для этой книги в AmountOfBooks, устанавливается значение 0 и когда книги добавляются или выполняется баланс, либо увеличивается, либо уменьшается.

Таким образом, поля для модели AmountOfBooks не отображаются, когда я нажимаю кнопку "Добавить количество книг" в администраторе Django.

Но я хочу удалить эту кнопку из администратора Django только для модели AmountOfBooks.
Как это сделать?

UPDATE
Продолжение этого вопроса доступно на Как сделать модель Django просто просмотренной (только для чтения) в Django Admin?

Ответ 1

Это легко, просто перегрузите метод has_add_permission в свой класс Admin следующим образом:

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

Ответ 2

Для этого вам необходимо переопределить метод has_add_permission в вашем классе Admin:

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/

Ответ 3

Вы спросили о своем дизайне, поэтому я расскажу об этом в первую очередь. Если вы хотите сохранить историю своего запаса, то наличие отдельной таблицы (модели) имеет смысл, но тогда вам понадобится поле временной метки и уникальное ограничение (книга, временная метка). Теперь, если вы просто хотите сохранить текущую акцию, отношения между книгой и суммой действительно один к одному, поэтому поле суммы действительно относится к таблице книг. В этом случае вам просто нужно добавить "сумму" в атрибут bookAdmin "readonly_fields" книги, и ваша проблема будет решена.