是否可以授予用户查看权限,但不能更改或删除。权限查看,但不能更改! - Django
目前在我看到的唯一权限是“添加”,“更改”和“删除”...但在那里没有“读取/查看”。
我真的需要一些用户将只能咨询管理面板,为了看看已被添加。
是否可以授予用户查看权限,但不能更改或删除。权限查看,但不能更改! - Django
目前在我看到的唯一权限是“添加”,“更改”和“删除”...但在那里没有“读取/查看”。
我真的需要一些用户将只能咨询管理面板,为了看看已被添加。
在admin.py
# Main reusable Admin class for only viewing
class ViewAdmin(admin.ModelAdmin):
"""
Custom made change_form template just for viewing purposes
You need to copy this from /django/contrib/admin/templates/admin/change_form.html
And then put that in your template folder that is specified in the
settings.TEMPLATE_DIR
"""
change_form_template = 'view_form.html'
# Remove the delete Admin Action for this Model
actions = None
def has_add_permission(self, request):
return False
def has_delete_permission(self, request, obj=None):
return False
def save_model(self, request, obj, form, change):
#Return nothing to make sure user can't update any data
pass
# Example usage:
class SomeAdmin(ViewAdmin):
# put your admin stuff here
# or use pass
在change_form.html替换此:
{{ adminform.form.non_field_errors }}
与此:
<table>
{% for field in adminform.form %}
<tr>
<td>{{ field.label_tag }}:</td><td>{{ field.value }}</td>
</tr>
{% endfor %}
</table>
然后通过删除该行删除提交按钮:
{% submit_row %}
你不能只是查看Django管理的事情。
这里有一个databrowse应用程序。
链接断开。 – 2014-02-23 18:26:20
@Ryu_hayabusa它被弃用,请参阅http://stackoverflow.com/questions/17961791/as-django-databrowse-is-deprecated-in-django-1-4-is-there-a-better-way-for-数据 – 2014-02-24 19:33:30
链接无法访问 – 2017-10-25 10:08:08
一种解决方法是在模型上增加一个“保存”权限,如果用户具有此权限,则检查modeladmin的save_model
方法,如果他没有,那意味着他可以在此模式中执行所有操作保存编辑的数据!
这是一个了不起的想法!谢谢!我想我可能会接受这个答案:) – RadiantHex 2010-06-18 11:49:33
您可以通过以下方式做到这一点:
1)可以使字段只读如果该对象已created.But这样没有人可以更改的字段
2)你可以使用databrowse
3)您可以使用表单验证,如果用户如果有域改变
4是不是在选择列表抛出验证错误),你可以创建一个视图,如果用户是在列表中,然后将其重定向到正常流程或重定向他到简单的html只读页面
5)使用jquery使字段只读是用户不在列表中,并覆盖保存方法来检查任何智能。在你的保存方法抛出错误任何形式已经改变,用户不在您的list.username = request.user.username
您也可以重写ModelAdmin.change_view(如Django文档中所述)。只要确保你也覆盖save_model以确保用户无法更新数据
向上面提到的Bernhard Vallant提供样品。在我的admin.py文件,我将放在
class LogBookAdmin(admin.ModelAdmin):
list_display = ['dateEntry','due_date', 'controlNo', 'carrier', 'status']
exclude = ['encoder_status', 'engr_status', 'chief_status', 'ischecked']
def save_model(self, request, obj, form, change):
if request.user.groups.filter(name='Encoder').exists():
pass
else:
return super(LogBookAdmin, self).save_model(request, obj, form, change)
假设我有一组名称Encoder
,我想他们只能查看日志。但其他组名可以保存任何更改。
重复:https://stackoverflow.com/a/33543817/101831
见
class ReadOnlyAdminMixin(object):
"""Disables all editing capabilities."""
change_form_template = "admin/view.html"
def __init__(self, *args, **kwargs):
super(ReadOnlyAdminMixin, self).__init__(*args, **kwargs)
self.readonly_fields = self.model._meta.get_all_field_names()
def get_actions(self, request):
actions = super(ReadOnlyAdminMixin, self).get_actions(request)
del actions["delete_selected"]
return actions
def has_add_permission(self, request):
return False
def has_delete_permission(self, request, obj=None):
return False
def save_model(self, request, obj, form, change):
pass
def delete_model(self, request, obj):
pass
def save_related(self, request, form, formsets, change):
pass
模板/管理/ view.html
{% extends "admin/change_form.html" %}
{% load i18n %}
{% block submit_buttons_bottom %}
<div class="submit-row">
<a href="../">{% blocktrans %}Back to list{% endblocktrans %}</a>
</div>
{% endblock %}
模板/管理/ view.html(用于格拉佩利)
{% extends "admin/change_form.html" %}
{% load i18n %}
{% block submit_buttons_bottom %}
<footer class="grp-module grp-submit-row grp-fixed-footer">
<header style="display:none"><h1>{% trans "submit options"|capfirst context "heading" %}</h1></header>
<ul>
<li><a href="../" class="grp-button grp-default">{% blocktrans %}Back to list{% endblocktrans %}</a></li>
</ul>
</footer>
{% endblock %}
我有一个解决方法,需要牺牲更改只有权限。在管理模板change_form.html
中,我同时检查添加和更改模板中的权限,并且仅在用户同时具有权限时才显示submit_row
。因此,具有更改权限的用户只能查看change_list和change_form,但从不会看到按钮提交他们所做的更改。
的变化我做:
myapp/templates/admin/myapp/
change_form.html
目录替换 {% block submit_buttons_bottom %}{% submit_row %}{% endblock %}
与
{# Use change permission only as read only #}
{% if has_change_permission and has_add_permission %}
{% block submit_buttons_bottom %}{% submit_row %}{% endblock %}
{% endif %}
这是远远干净,还允许用户如果除了标准的管理形式等方面都提供了更改的数据,但也许它不够的,如果你只是想保护员工意外更改他们不应该的数据。
您可以使用the django-admin-view-permission application:
pip install django-admin-view-permission
INSTALLED_APPS = [
'admin_view_permission',
'django.contrib.admin',
...
]
我跟着这个答案,它删除添加和删除按钮,但没有更改按钮。当我试图以相同的方式删除更改按钮(通过返回false),它根本不显示模型! – Marjan 2012-08-31 10:59:04
你必须自己删除链接(例如使用jQuery)。 'save_model'方法不返回任何内容,所以用户不能保存。所以即使他们偶然发现了这个链接,他们也不会有任何伤害。或者,也许我不明白你的问题。 – 2012-08-31 22:13:34
这很好,但Django文档说save_model应该保存或删除数据,它不应该用于否决目的。 https://docs.djangoproject.com/en/1.4/ref/contrib/admin/#modeladmin-methods – 2014-02-23 17:58:11