Ответ 1
Это легко, просто перегрузите метод has_add_permission в свой класс Admin следующим образом:
class MyAdmin(admin.ModelAdmin):
def has_add_permission(self, request):
return False
У меня есть модель 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?
Это легко, просто перегрузите метод has_add_permission в свой класс Admin следующим образом:
class MyAdmin(admin.ModelAdmin):
def has_add_permission(self, request):
return False
Для этого вам необходимо переопределить метод 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/
Вы спросили о своем дизайне, поэтому я расскажу об этом в первую очередь. Если вы хотите сохранить историю своего запаса, то наличие отдельной таблицы (модели) имеет смысл, но тогда вам понадобится поле временной метки и уникальное ограничение (книга, временная метка). Теперь, если вы просто хотите сохранить текущую акцию, отношения между книгой и суммой действительно один к одному, поэтому поле суммы действительно относится к таблице книг. В этом случае вам просто нужно добавить "сумму" в атрибут bookAdmin "readonly_fields" книги, и ваша проблема будет решена.