我正在Django中构建一个应用程序,允许用户构建自己的表单并有效地自定义动态模型。
经过大量研究,我决定通过Django,PostgreSQL和JSONFields来实现这一点,其中一个模型保存模式,另一个模型保存记录数据:
class = Template(models.Model):
schema = JSONField(null=True) # Schema for the form/model
class = DynamicModel(models.Model):
data = JSONField(null=True) # Corresponding data for the form/model
template = models.ForeignKey(Template, null=True,
blank=False, on_delete=models.SET_NULL)
这意味着用户可以定义自己的模型模板,而我可以在另一个模型中使用该模板保存不同的记录。
这个想法是解析template.schema
JSONField以使用jQuery显示可编辑表单,并将输出存储为dynamicmodel.data
JSONField。验证在客户端进行。
但是,如果我要允许用户在其模型中包含ForeignKey
查找,则会带来缺点。例如,假设他们想添加一个选择框,以提供customer.id
类中来自不同Customer(models.Model)
的选择。
如果不将ForeignKey直接硬编码到DynamicModel类中(这会破坏练习的重点),您能想到我可以实现此目标的方法吗?