在Django Admin中创建可以覆盖模型字段内容的自定义字段。

django-admin-fieldoverride的Python项目详细描述


django管理字段覆盖

一种允许本地模型重写来自其他源的只读字段的系统,例如来自API(PBSMM、FMP)

背景

对于使用外部api(例如PBSMM或FMP)的项目,拉取的内容是只读的。 然而,有时,生产者想要覆盖特定实例的特定字段:例如,对于pbsmmepicode记录,他们 可能需要使用与来自API的描述不同的描述。在

通常情况下,会设置一个“本地”模型实例,该实例与从API获取的记录具有1:1的关系, e、 g.对于PBSMM,有一个PBSMMEpisode模型,它有一个description_long字段。你可以在本地创建所有的字段 模型,然后设置方法以在视图中生成内容时仔细阅读它们。然而,这很快就会变得一团糟,因为a)在大多数情况下,不需要重写;b)您最终将所有这些额外字段编码为“以防万一”,而不完全知道它们会这样做 曾经被使用过。在

这使得管理员满脑子都是阻碍内容管理的问题。在

输入字段覆盖

如果-相反-您有一个“override”字段,它有一个指向“local”模型实例的FK,这样您只需在以下情况下使用它呢 你需要。在

在这种情况下,管理被简化了:您只需为该记录的所有覆盖设置一个内联管理员。在

工作原理

您可以通过获取任何模型类的字段列表_元字段. 他们中的大多数人可能不想被推翻 (例如,id和其他诸如创建日期等)。因此,我们必须想出一种方法来过滤掉这些字段。
对于其余的集合,它将是管理中的下拉字段和覆盖内容的字段。所有的东西都储存在 一个表,它还记录了涉及的模型(因此是某种通用外键)。在

在处理记录时,即生成详细信息页的视图,或restapi端点,您将浏览可重写的列表 字段,检查是否有重写,然后使用它,或者从API数据返回到原始字段。在

(请注意,对于像路演这样涉及两个来源的项目,FMP和PBSMM,但是我们可以使用这个设置来处理 优先级,我们还可以设置它,对于任何给定的重写字段,顺序可以不同)。在

安装

创建模型映射重写字段方法

每个模型都需要一个map_override_fields方法,该方法返回可以重写的字段列表。列表中的每一项都是 具有覆盖的参数:

  • 字段:重写时字段的名称,例如“说明”
  • 覆盖:这是将被覆盖的字段列表,例如[“fmp_优description”,“pbsmm_udescription_long”]

它们用于填充覆盖模型中字段的选择,覆盖模型还具有覆盖内容的字段。在

到目前为止,处理这些字段可以有不同类型(例如文本和整数)这一事实的唯一方法是 将所有内容存储为TextField,然后在处理时根据需要重新转换内容。在

在视图中

我们可能需要一个mixin,在上下文中设置适当的东西。在

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java为什么单元测试中的“验证”在不同实例的情况下不返回“不同参数”错误?   java如何从具有相同类名的div中选择元素(Selenium)   Java制作纸牌游戏,有关于类的问题吗   bluej在Java中使用变异器和访问器设置颜色和圆半径   java准确定位异常错误的最佳方法是什么?   使用多个监视器时的java设置对话框位置   java如何在不使用JavascriptExecutor的情况下在网页中向下/向上滚动   java在for循环中将大小设置为n   java为什么akka需要不可变的消息   java LdapInvalidDnException:意外标记:   java如果字符串的第一个字母不是一个,如何大写?   使用htmlunit的java html内容提取   java从CDI托管bean获取方法的注释   java有办法在运行时检查post请求参数的大小吗   java我可以将实体注入托管Bean并直接持久化吗?