Ответ 1
Отменить методы сохранения и удаления для модели. Как вы планируете добавлять объекты к своей модели?
def save(self, *args, **kwargs):
return
def delete(self, *args, **kwargs):
return
Можно ли использовать только модель Django? Нет создания, обновления и т.д.
N.B. этот вопрос отличается от:
Сделать модель Django доступной только для чтения? (этот вопрос позволяет создавать новые записи)
Целая модель как доступная только для чтения (касается только интерфейса администратора Django - я бы хотел, чтобы модель читалась только во всем приложении)
Отменить методы сохранения и удаления для модели. Как вы планируете добавлять объекты к своей модели?
def save(self, *args, **kwargs):
return
def delete(self, *args, **kwargs):
return
Чтобы принять дополнительные меры предосторожности, чтобы ваша модель была доступна только для чтения, вы можете использовать параметр DATABASE_ROUTERS, чтобы отключить запись для каждой модели:
# settings.py
DATABASE_ROUTERS = ('dbrouters.MyCustomRouter', )
# dbrouters.py
class MyCustomRouter(object):
def db_for_write(self, model, **hints):
if model == MyReadOnlyModel:
raise Exception("This model is read only. Shame!")
return None
Я бы посчитал это страховым полисом, а не основным способом решения проблемы. Ответ Микаэля, например, хорош, но не охватывает все случаи, потому что некоторые операции Django обходят методы delete
и save
.
Смотрите ответ Хуана Хосе Брауна в Django - как указать базу данных для модели? для более подробного описания использования базы данных маршрутизатора.
Однако даже в подходе к маршрутизатору базы данных, похоже, есть лазейки, то есть есть способы отправки SQL из Django, который обходит код вашего маршрутизатора. Чтобы быть абсолютно уверенным в создании чего-либо только для чтения, вы должны установить права доступа для пользователя базы данных. В этом вопросе описывается, как настроить пользователя Postgreql, доступного только для чтения, который затем может установить пользователь базы данных Django в settings.DATABASES
.
Througth это очень старый вопрос - это будет полезно: https://docs.djangoproject.com/en/dev/ref/models/options/#managed
Если False, для этой → > модели не будут созданы операции создания или удаления таблицы базы данных. Это полезно, если модель представляет существующую таблицу или представление базы данных, которое было создано другими способами.