我有两个模型,一个是Employee,另一个是Asset,资产和Employee之间有多对一的关系。资产作为StackedInline字段添加到员工管理界面,是否存在我可以在员工管理中将资产设为只读字段。
我的意图是显示员工当前在Admin中持有的所有资产,这样他就不会意外删除这些资产。
发布于 2008-12-04 12:32:06
编辑:实际上,我认为这不适用于内联模型。
Django将在Django 1.1中添加原生只读字段,应该在3月中旬左右发布。
Read Only Admin Fields (http://www.djangosnippets.org/snippets/937/)
此代码片段将允许您在管理中将字段设置为只读。
发布于 2009-07-03 06:58:31
使用此代码并将其导入到admin.py中,因为ReadonlyAdmin.This是只读管理的修改形式。
from django import forms
from django.utils.safestring import mark_safe
from datetime import datetime
class ReadOnlyWidget(forms.Widget):
def __init__(self, original_value, display_value):
self.original_value = original_value
self.display_value = display_value
super(ReadOnlyWidget, self).__init__()
def render(self, name, value, attrs=None):
if self.display_value is not None:
return unicode(self.display_value)
return unicode(self.original_value)
def value_from_datadict(self, data, files, name):
return self.original_value
#to make fields foreignkey readonly
class ReadOnlyAdminFields(object):
def get_form(self, request, obj=None):
form = super(ReadOnlyAdminFields, self).get_form(request, obj)
if hasattr(self, 'readonly') and obj is not None:
for field_name in self.readonly:
if field_name in form.base_fields:
if hasattr(obj, 'get_%s_display' % field_name):
display_value = getattr(obj, 'get_%s_display' % field_name)()
else:
display_value = None
if getattr(obj, field_name).__class__ in [unicode , long, int, float, datetime, list]:
form.base_fields[field_name].widget = ReadOnlyWidget(getattr(obj, field_name), display_value)
else:
form.base_fields[field_name].widget = ReadOnlyWidget(getattr(obj, field_name).id, display_value)
form.base_fields[field_name].required = False
return form发布于 2008-12-04 09:44:25
我不认为django-admin中有这方面的标志,请查看Django书的第18章以了解更多细节,您需要手动修改模板
http://www.djangobook.com/en/beta/chapter18/
https://stackoverflow.com/questions/339969
复制相似问题