将自定义字段添加到django模型(不更改源代码)

gue*_*tli 7 python django database-schema

客户想要将自定义字段添加到我们提供的django模型中.

他想在没有编程的情况下独自完成这项工作.

这些东西应该是可添加的:

  • 布尔值(是/否)字段.可选"未设置"
  • 单选领域
  • 多选字段
  • 单行文本字段
  • textarea字段
  • 日期

例:

客户想要添加一个他称之为"成功"的字段.字段>应该有这些选择:是/否/未设置.默认未设置.

如果我可以通过创建或扩展模型来实现这一目标,那将会很容易.但在这种情况下,不允许更改源代码:-(

怎么解决这个?

更新

需要支持查询具有给定值的实例.示例:显示"成功"为True的所有实例.

Sid*_*ava 7

您可以创建遵循EAV原则(实体属性值)的表.基本上这是一个非规范化的表,包含以下列:
[ID(和/或slug),float_value,integer_value,string_value](向此表添加更多列)

现在说你有一个名为"会员"的现有表.当客户通过您的UI添加动态字段时,您可以在此处添加条目并使用"ID"查找给定成员.


eug*_*ene 0

如果那真的是你想要的。

  1. 创建足够的客户需要的字段。

    boolean_field_1 = models.BooleanField(..)
    boolean_field_2 ..
    date_field_1 = ..
    date_field_2 = ..
    
    Run Code Online (Sandbox Code Playgroud)
  2. 将别名映射存储在某处。

    我可以添加一个用于别名映射的字段。

    json_mapping_field = JSONField()
    # this has is_successful: boolean_field_1
    
    Run Code Online (Sandbox Code Playgroud)
  3. 然后找到可以将别名替换回真实字段名称的地方

    对于简单的过滤和更新,您可以覆盖

    1. 查询集.过滤器 查询集.排除
    2. QuerySet.update、UpdateQuery.add_update_values
    3. 最后使用 from_queryset 让你的经理使用覆盖的 QuerySet。