客户希望将自定义字段添加到我们提供的django模型中。
他希望自己做这件事,而无需编程。
这些东西应该是可以添加的:
示例:
客户希望添加一个他称之为“成功”的字段。并且该领域>应该有这些选择:是/否/未设置。默认不设置。
如果我可以通过创建或扩展模型来实现这一目标,那将会很容易。但在这种情况下,不允许更改源代码: - (
如何解决这个问题?
更新
需要支持查询具有给定值的实例。示例:显示“成功”为“真”的所有实例。
答案 0 :(得分:7)
您可以创建一个遵循EAV principle(实体属性值)的表。基本上这是一个非规范化的表,其中包含以下列:
[ID(和/或slug),float_value,integer_value,string_value](向此表添加更多列)
现在说你有一个名为“会员”的现有桌子。当客户通过您的UI添加动态字段时,您可以在此处添加条目并使用“ID”查找给定成员。
答案 1 :(得分:2)
我使用Django Dynamic Forms。开箱即用,它允许用户通过管理员创建自己的表单。您可能希望扩展它以构建更加用户友好的UI,但这应该让您相当远。它支持
答案 2 :(得分:2)
好吧,当我遇到这样的问题时,我曾经创建了一个自定义字段模型,带有名称字段和类型字段,通常是一个选择字段,可以选择可能的字段类型。您还可以添加is_active字段以过滤活动和非活动CustomField。
然后,当我创建for时,我搜索这些对象以了解我必须在该表单中包含哪些字段。
要存储数据,我会有另一个名为CustomFieldAnswer的模型,或者像这样的一些思考。此模型应具有应具有此数据的主模型的ForeignKey和自定义字段。
这样做,你可以为你的模型提供任何类型的字段,并且客户需要编写任何代码。
您可以使用元编程基于CustomFields中的查询在表单中创建实际字段。或者,您可以将字段放在模板中并更改每个CustomField的输入类型。
希望有所帮助!
答案 3 :(得分:0)
如果这真的是你想要的。
创建客户所需的足够字段。
boolean_field_1 = models.BooleanField(..)
boolean_field_2 ..
date_field_1 = ..
date_field_2 = ..
在某处存储别名映射。
我可以为别名映射添加一个字段。
json_mapping_field = JSONField()
# this has is_successful: boolean_field_1
然后找到可以将别名替换回真实字段名称的地方
对于简单的过滤和更新,您可以覆盖
答案 4 :(得分:0)
我知道这听起来像是一个糟糕的黑客,但也许你可以构建一个创建文本文件的界面?
JobTitles
答案 5 :(得分:0)
我刚刚发现,djangopackages上甚至还有一个比较网格:
https://www.djangopackages.com/grids/g/dynamic-models/
航向:
用于在设置中或甚至在运行时向模型添加字段的应用程序。
某些StackOverflow管理员删除了这个答案,这就是我再次写它的原因。
删除原因是:
虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供参考链接。如果链接页面发生更改,仅链接答案可能会无效。
以下是今天在比较网格上列出的当前包: