首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Django外键只读

Django外键只读
EN

Stack Overflow用户
提问于 2008-12-04 09:07:37
回答 5查看 4.3K关注 0票数 1

我有两个模型,一个是Employee,另一个是Asset,资产和Employee之间有多对一的关系。资产作为StackedInline字段添加到员工管理界面,是否存在我可以在员工管理中将资产设为只读字段。

我的意图是显示员工当前在Admin中持有的所有资产,这样他就不会意外删除这些资产。

EN

回答 5

Stack Overflow用户

发布于 2008-12-04 12:32:06

编辑:实际上,我认为这不适用于内联模型。

Django将在Django 1.1中添加原生只读字段,应该在3月中旬左右发布。

Read Only Admin Fields (http://www.djangosnippets.org/snippets/937/)

此代码片段将允许您在管理中将字段设置为只读。

票数 3
EN

Stack Overflow用户

发布于 2009-07-03 06:58:31

使用此代码并将其导入到admin.py中,因为ReadonlyAdmin.This是只读管理的修改形式。

代码语言:javascript
运行
复制
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
票数 2
EN

Stack Overflow用户

发布于 2008-12-04 09:44:25

我不认为django-admin中有这方面的标志,请查看Django书的第18章以了解更多细节,您需要手动修改模板

http://www.djangobook.com/en/beta/chapter18/

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/339969

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档