【发布时间】:2023-03-09 22:46:01
【问题描述】:
TLDR
我的一个模型包含的数据可以是字符字段、文本字段或布尔字段,这些数据基于在通过外键连接的单独模型中做出的选择。在 Django 中建模这个最有效的方法是什么?
我的问题
我正在组装一个 Django 应用程序,它在一个有点冗长的两步过程中输出一个 python {'key': 'value'} 字典。第一步,用户设计一个包含“TemplateEntries”集合的自定义“模板”。在伪代码中:
Template MODEL
foreign key: User
description = textfield
name = charfield
TemplateEntry MODEL
foreign key: Template
key = charfield
value_type = charfield(choices='CharField', 'TextField', 'BoolField')
description = textfield
order = positivesmallintegerfield (So users can re-arrange the order of TemplateEntries when creating the Template)
示例模板表格 #1
- [说明] | [钥匙] |字段类型:[字符字段、文本字段、布尔字段之间的选择]
- [说明] | [钥匙] |字段类型:[字符字段、文本字段、布尔字段之间的选择]
- [说明] | [钥匙] |字段类型:[字符字段、文本字段、布尔字段之间的选择]
- [描述] | [钥匙] |字段类型:[字符字段、文本字段、布尔字段之间的选择]
- [说明] | [钥匙] |字段类型:[字符字段、文本字段、布尔字段之间的选择]
在第二步中,为相同或不同的用户提供基于模板的表单以及每个值的相应字段。在伪代码中:
EntrySet MODEL
foreignkey: User
foreignkey: Template
name = charfield
Entry MODEL
foreignkey: EntrySet
foreignkey: TemplateEntry
value = ??
模板 #1 的示例输入表单
(条目代表什么的描述是从TemplateEntry继承来的)
- [字符字段]
- [字符字段]
- 真/假(布尔字段)
- [字符字段]
- [----------------文本字段-----------------]
最后,通过将 Template 中每个 TemplateEntry 的 key 字段与 EntrySet 中每个 Entry 的 value 字段相结合来创建字典。
我遇到的问题是我不知道如何在条目模型中为“值”字段建模,因为它可能采用字符字段、文本字段或布尔字段的形式。我目前的方法是将它分成三个不同的字段:value_short = charfield、value_long = textfield、value_bool = boolfield,并在创建字典时遍历它们中的每一个,只取具有内容的字段的值。但是,这似乎效率低下,如果其中一个以上包含一个值,则会导致错误。任何有关如何解决此问题或改进我的模型的建议都将不胜感激!
【问题讨论】:
标签: python django model polymorphism