Dan*_*sen 25 django django-admin
我想使用django admin生成一个对象的只读视图,其中包含一个"编辑"按钮,可以切换到同一对象的常见更改视图.
我知道如何使用readonly属性来生成只读视图,但我不知道如何生成两个视图,一个是只读的,一个是允许更改的.
我想尽可能多地重用管理界面,而不是从头开始编写视图.
请注意,此问题与权限无关:所有用户都有权更改对象.只是我希望他们不使用change_view,除非他们确实打算进行更改,降低意外更改或同时更改的风险.
Dan*_*sen 18
这是一个答案,字面上只用几行代码和几个模板更改来完成我的问题:
class MyModelAdmin(admin.ModelAdmin):
fieldsets = [...]
def get_readonly_fields(self, request, obj=None):
if 'edit' not in request.GET:
return <list all fields here>
else:
return self.readonly_fields
Run Code Online (Sandbox Code Playgroud)
现在,change_form的常用URL将生成只读的change_form,但如果您将"?edit = 1"附加到URL,则可以进行编辑.
还可以自定义change_form模板,具体取决于URL中是否有"?edit = 1".要做到这一点,把'django.core.context_processors.request'在TEMPLATE_CONTEXT_PROCESSORS中settings.py,然后用request.GET.edit模板.
例如,要在不处于编辑模式时添加"编辑"按钮,请插入
{% if not request.GET.edit %}
<li><a href="?edit=1">Edit</a></li>
{% endif %}
Run Code Online (Sandbox Code Playgroud)
只是之后<ul class="object-tools">在change_form.html.
另一个例子,change_form.html改为包含
{% if save_on_top and request.GET.edit %}{% submit_row %}{% endif %}
Run Code Online (Sandbox Code Playgroud)
将意味着提交行将仅以编辑模式显示.也可以使用此方法隐藏内联等上的删除按钮.
作为参考,这是我投入的settings.py:
TEMPLATE_CONTEXT_PROCESSORS = (
'django.contrib.auth.context_processors.auth',
'django.core.context_processors.debug',
'django.core.context_processors.i18n',
'django.core.context_processors.media',
'django.contrib.messages.context_processors.messages',
# Above here are the defaults.
'django.core.context_processors.request',
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7459 次 |
| 最近记录: |