python - 如何避免将多个元素硬编码到我的 Django 模型中?
问题描述
我对 Stack Overflow 很陌生,所以提前感谢您的洞察力。这是一个关于 Django 3.0(所以 Python 3.6+)的问题。
用例:
假设我已经成功地解析了联邦法规,并且我已经确定每个法规都包含三个部分 - 引文、主题和法规本身。我可以根据需要将它们解析为嵌套字典(或 XML、CSV 或任何格式)。
字典是这样的:
{
'citation 1' : {'Subject of Regulation 1' : 'Text of regulation'}
'citation 2' : {'Subject of Regulation 2 : 'More regulatory text'}
}
有数百条法规和引用。我不想将这些规则硬编码到我的模型中,所以我想将它们存储在字典中并将它们调用到我的模型中。
我们还假设我有一个复杂的业务,需要遵守许多这些法规,所以我必须弄清楚每个法规是否适用以及我将如何实施它。
所以这是我的models.py
class CFR(models.Model):
citation = models.CharField(max_length = 25)
subject = models.CharField(max_length = 25)
regulation_text = models.TextField()
applicable = models.BooleanField(default = True)
implementation = models.TextField()
该模型包含适用性和实施的字段。
我的表格.py。是的,我知道我不应该使用__all__
.
class RegulationForm(forms.ModelForm):
class Meta():
model = CFR
fields = ('__all__')
和我的views.py
class ApplicabilityView(CreateView):
model = CFR
template_name = "template.html"
form_class = RegulationForm
我想使用该模型:
- 遍历字典中的每个规则。
- 呈现包含字典中所有规定的表格
- 将模型中的两个字段附加到表格中的每个规则(适用和实施字段)。
- 在表格末尾有一个保存按钮。
我希望使用 将法规字典传递到查询集中def get_initial
,但我似乎无法弄清楚。传递字典将允许我在 CFR 的任何部分重复使用代码,只要我能弄清楚如何制作字典。
另一种方法是将所有法规硬编码到我的models.py
- 我宁愿找到一个更灵活的解决方案。
谢谢!
解决方案
一些选项可能是:
- Postgres 特定的 json 字段https://docs.djangoproject.com/en/3.0/ref/contrib/postgres/fields/#django.contrib.postgres.fields.JSONField
- Maria/MySQL JSON 字段https://django-mysql.readthedocs.io/en/latest/model_fields/json_field.html
- django-annoying 包 json 字段https://github.com/skorokithakis/django-annoying#jsonfield
- 使用 NoSQL https://django-mongodb-engine.readthedocs.io/en/latest/
推荐阅读
- python - 计算判别的数学域误差
- python - 如何在 Python3 中使用 App Engine 安排 Cloud Datastore 导出
- mysql - 插入包含大列字段的一批行时,语句关闭后不允许进行任何操作
- mysql - 将每个表的结果显示为行
- json - 使用 cerberus 深度嵌套的 json 验证器
- firebase - Cloud Firestore - 添加和查询布尔标志
- r - 美学必须是长度 1 或与数据 (1) 相同:颜色
- c# - 长度不能小于零 参数名称:length
- c# - 如何使用 C# 将十六进制转换为浮点数
- python-3.x - 从 keras.utils.normalize 重新应用过去的规范化