向Django模型添加自定义字段(不更改源代码)

2024-04-25 13:55:27 发布

您现在位置:Python中文网/ 问答频道 /正文

客户希望向我们提供的django模型添加自定义字段。在

他想自己动手,不用编程。在

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

  • 布尔(是/否)字段。可选“未设置”
  • 单选字段
  • 多选字段
  • 单行文本字段
  • 文本区域字段
  • 日期

示例:

The customer wants to add a field he calls "was successful". And the field > should have these choices: yes/no/unset. Defaulting to unset.

如果我可以通过创建或扩展一个模型来实现,事情就会变得简单。但在这种情况下,不允许更改源代码:-(

如何解决这个问题?在

更新

需要支持查询具有给定值的实例。示例:显示“was successful”为真的所有实例。在


Tags: todjango实例模型文本示例field客户
3条回答

当我遇到这样的问题时,我常常创建一个自定义字段模型,有一个名称字段和一个类型字段,通常是一个选项字段,其中包含对可能字段类型的选择。您还可以添加一个活动域来筛选活动和非活动的自定义域。在

然后,当我创建for时,我会搜索这些对象,以确定在该表单中必须有哪些字段。在

为了存储数据,我需要另一个模型,叫做CustomFieldAnswer,或者类似这样的想法。这个模型应该有一个ForeignKey到应该有这个数据的主模型和自定义字段。在

这样做,你可以有任何类型的字段为你的模型,而不是你的客户需要编码任何东西。在

可以使用元编程根据CustomFields中的查询在表单中创建实际字段。或者,您可以将字段放入模板中,然后更改每个CustomField的输入类型。在

希望有帮助!在

您可以在EAV principle(实体属性值)后面创建一个表。基本上,这是一个非规范化的表,包含以下列:
[ID(和/或slug)、float_value、integer_value、string_value](向该表添加更多列)

现在假设有一个名为“Member”的表。当客户通过您的UI添加一个动态字段时,您在这里添加条目并使用“ID”来查找给定成员。在

我用Django Dynamic Forms。开箱即用,它允许用户通过管理员创建自己的表单。您可能希望扩展它来构建一个更友好的用户界面,但这应该能让您走得更远。它支持

  • 布尔型
  • 选项(选择)
  • 多选(多选)
  • 日期
  • 日期时间
  • 时间
  • 电子邮件
  • 整数
  • 单行文字
  • 多行文本

相关问题 更多 >