Oll*_*ass 16 django readonly django-models django-orm
是否可以将Django模型设为只读?没有创建,更新等
注意这个问题不同于:
将Django模型设为只读?(这个问题允许创建新记录)
整个模型为只读(仅涉及Django管理界面 - 我希望模型只能在整个应用程序中读取)
Mik*_*ael 18
覆盖模型的保存和删除方法.您打算如何在模型中添加对象?
def save(self, *args, **kwargs):
return
def delete(self, *args, **kwargs):
return
Run Code Online (Sandbox Code Playgroud)
为了进一步预防模型为只读,可以使用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
Run Code Online (Sandbox Code Playgroud)
我认为这是一项保险政策,而不是解决问题的主要方法。例如,Mikael的回答很好,但由于某些Django操作绕过delete和save方法,因此无法涵盖所有情况。
请参阅Django中 Juan JuanJoséBrown的答案-如何为模型指定数据库?有关使用数据库路由器的详细说明。
但是,即使数据库路由器方法似乎也存在漏洞,即,有一些方法可以从Django发送SQL绕过您的路由器代码。为了绝对确保将某些内容设置为只读,您应该对数据库用户设置权限。 此问题描述了如何设置只读postgreql用户,然后可以由Django在中设置数据库用户settings.DATABASES。
| 归档时间: |
|
| 查看次数: |
10965 次 |
| 最近记录: |