小编Dan*_*air的帖子

在运行时更改Django设置

我想将一些(特定于应用程序的)设置暴露给管理界面,这样用户可以轻松地更改它们,也不必重新启动Django.

我该怎么办呢?

我查看了http://djangopackages.com/grids/g/live-setting/上的应用程序(btw django-constance是最吸引人的)但实际上所有这些应用程序正在做的是将值存储在数据库中,提供Web用于更改它们和缓存的界面.Django中已经内置了前两个功能吗?

我看到的最大缺点是没有任何应用程序是这些设置的旧位置(settings.py)的替代品,并且要求我迁移到他们的表示法,并且经常添加另一个上下文处理器以在模板中访问它们.

我不能这样做吗?

  1. 为我的设置创建一个模型(这给了我各种类型和验证)
  2. 实例化一个这样的对象来保存我的设置(这允许用户在管理界面中编辑它们) - 我可以将默认值转储为像其他模型一样的固定装置
  3. 包装settings.py所以它为我的设置进行数据库查询 - http://www.loose-bits.com/2011/04/extending-django-settings-with-derived.html

从我目前的天真观点来看,我看到的唯一缺点是:

  1. 添加或更改可用设置需要架构迁移(南).- 我可以忍受这一点.
  2. 我有一个可能有多个实例的模型,但实际上只需要一个单例. - 在某些时候,这实际上可能是一个有用的功能.
  3. 性能/缓存:查看http://code.djangoproject.com/svn/django/trunk/django/conf/我必须在设置包装器和/或模型中加入一点聪明,以便模型更改清除或更新缓存的值. - 似乎不是火箭科学.
  4. 在另一个项目中做同样的事情需要再次进行类似的努力. - 我认为settings.py中的单个字典常量,包含查找的模型名称和字段名称都是不同的.

这不是两个世界中最好的 - 运行时管理员(具有所有额外津贴),数据库后端,缓存,以及我的所有设置.USED_TO_BE_IN_SETTINGS_DOT_PY将需要任何更改.我错过了什么吗?

django settings runtime

47
推荐指数
3
解决办法
4万
查看次数

最终用户的Django AdminSite/ModelAdmin?

并非所有软件都需要左侧"内容制作者"的管理界面和右侧"访问者/成员"的站点.

人们常说"管理员不是你的应用程序"(例如,参见接受的答案(2009年3月)).

我在Django文档中找不到这样的限制.上面似乎有一个潜在的假设 - " 一个强大的,生产就绪的界面,内容制作者可以立即使用它来开始向网站添加内容 " - 但是肯定会预期不同级别的访问,甚至在FAQ中也会提到.还有多个AdminSite实例的其他用例呢?

我目前正在研究一种主要是CRUD接口的软件.每个用户都必须经过身份验证,管理员用户和客户之间的唯一区别是后者只能使用"他们的"对象(并且无法访问某些模型,如"用户"等).顺便说一句,"他们"在我的案例中与谁创造了对象没有关系,而是与"公司"相关联.

有没有令人信服的理由不坚持管理界面,只是配置正确的权限鸡尾酒?ModelAdmin权限可以信任吗?为什么不直接呼叫所有登录用户"员工"?

对于传统的非管理员视图,我看到自己正在重写已经存在的东西:ModelForm是一个不错的开始,但CRUD功能和类型相关的过滤器(包括日期深入分析)不是现成的组件.Admin的功能已经提供了最终用户所需的绝大多数功能,并且字段/过滤器/模板等的自定义足以满足我的需求.显然,在我添加新功能的地方,例如其按钮的可见性和对相应视图的访问需要权限检查.我并不担心.我只是好奇是否在这样的情况下,管理功能被其内置的权限集正确覆盖.有这方面的经验吗?

更新:对不起,这个问题的主要部分似乎不清楚.我并不担心我的自定义,我担心相信现有的管理应用程序及其权限的实现.另见Daniel和FallenAngel的评论.

django permissions admin

21
推荐指数
3
解决办法
5303
查看次数

如何在Django admin中向第三方外部jQuery插件提供$

我在我的Django管理员基础模板中包含了几个第三方jQuery插件,假设"$"可用.

对于我自己的代码,我一直很乐意这样做

(function($) {
    my_code = 'here';
})(django.jQuery);
Run Code Online (Sandbox Code Playgroud)

但是如何为外部文件中的其他人代码提供"$"?

<script src="{{ STATIC_URL }}js/jquery.json-2.2.min.js" type="text/javascript"></script>
Run Code Online (Sandbox Code Playgroud)

抱怨"$​​"未定义.我试过放

<script type="text/javascript">var $ = django.jQuery;</script>
Run Code Online (Sandbox Code Playgroud)

在那个外部引用之前,但无济于事(顺便说一下,为什么会这样?我理解加载同时发生,但是执行?我可以在定义之后立即使用"$".).

我对Django管理员提供的jQuery版本感到满意,并且真的不想加载另一个版本.我也不想编辑其他人的插件,以便从上面的"$"重新定义开始.编辑:我也不想像我自己的代码一样包装它,我只是不想触摸这些文件.

我是否真的不得不将$ .getScript() - http://api.jquery.com/jQuery.getScript - 放入我的匿名函数来加载这些文件?

编辑:在实际查看外部文件jquery.json-2.2.min.js之后,我看到它已经被包装到一个函数中,假定"jQuery"可用,而不是"$".插入后

var jQuery = django.jQuery;

在外部参考之前,它工作正常.但这真的应该怎么做呢?

django jquery namespaces admin external

11
推荐指数
2
解决办法
2785
查看次数

如何在 Django admin 中实现全局隐式过滤器?

我的很多模型都有一个“公司”模型的外键。每个登录的用户都可以是一个或多个公司的一部分(用户 m2m 公司,不为空)。

我希望当前的管理员用户有“公司护目镜”,即选择列表,在管理员索引页面或基本标题上,他们可以在其中切换他们的“当前”公司。这样做应该会自动应用“公司等于”过滤器 - 对于具有公司外键的模型 - 除了任何其他过滤器。

实现这一目标的最佳方法是什么?

注意:这是管理界面的舒适功能,现阶段不需要对模型进行实际保护(客户端视图确实需要,但我可以使用自定义管理器并通过 request.user 在那里查找)。

我现在的想法是:

  1. 在会话中存储当前公司。

  2. 使用中间件从会话中查找当前公司,并将公司附加到所有相关链接:

    a) change_list: (?/&)"company__eq=42"

    b) change_view "add?company=42" 对于具有 Company 外键的模型。

    这可能需要反向或模式匹配 URL 以找出它们的模型并检查它是否存在外键(或者我可能会事先准备该列表以提高性能)。

  3. 在每个 ModelAdmin 表单中包含外键字段,但通过 CSS 隐藏它,以便 change_view add ("new") 包含来自链接的预设外键值而不提及它。

您认为这是一种可行的方法吗?

如果实现了http://code.djangoproject.com/ticket/10761,我想我可以指定一个自定义查询集,它从 request.session 读取当前公司并完成它。也许更好地快速跟踪(=制作并提交补丁)该票?

编辑:或者可能只是在每个需要它/具有外键的 ModelAdmin 上重新定义 queryset() 方法?

django admin filter permanent

6
推荐指数
1
解决办法
1968
查看次数

动态更改 Django 管理内联表单的字段

我想动态地将 a 更改CharField为 a ChoiceField,因为我希望从当前请求确定的可能性列表中选择该值。

在 a 中,ModelAdmin我可以用 做到这一点get_form(),只需说:

form.base_fields[field_name] = forms.ChoiceField(...)
Run Code Online (Sandbox Code Playgroud)

但我怎样才能对 an 做同样的事情InlineModelAdmin (TabularInline)呢?我走了一会儿get_formset()get_fieldsets()但找不到合适的位置。

python django admin

5
推荐指数
1
解决办法
8697
查看次数