4

我有一个schema在 django 模型中调用的字段,它通常包含一个相当大的 json 字符串。在创建任何新实例时,我想添加一个默认值(大约 2000 个字符)。

我发现将整个内容转储到models.py变量中是相当不干净的。在我的架构(即 a TextField)中加载此默认值的最佳方法是什么?

例子:

class LevelSchema(models.Model):
    user = models.ForeignKey(to=User)
    active = models.BooleanField(default=False)
    schema = models.TextField() # Need a default value for this

我想了一下。如果我使用 json 文件将默认值存储在某处,那么放置它的最佳位置是什么?显然,如果它位于文件夹中的同一个应用程序中,则更可取。

4

2 回答 2

1

我发现变量的使用并不是特别不干净。default但是您可以“滥用”所有字段都支持的参数可以是可调用的事实。

所以你可以做这个“疯狂”的事情:

def get_default_json():
    json_text = open('mylargevalue.json').read()
    return json_text

然后在你的领域:

schema = models.TextField(default=get_default_json)

我没有尝试过类似的方法,但我想它可以工作。

于 2012-10-25T14:01:15.983 回答
1

文字比较庞大。将跨越文件的一半,因为它是格式化的 json,我希望将来可以编辑。我更喜欢从文件(如固定装置)加载它,只是我想知道 Django 中是否已经存在一个方法。

在 django 中,您有两种选择:

  1. 监听post_save,当created为 true 时,通过读取文件设置对象的默认值。

  2. 将默认值设置为可调用(一个函数),并在该方法中读取文件(确保之后关闭它),并返回其内容。

您还可以将数据粘贴在一些 k/v 存储(如 redis 或 memcache)中,以便更快地访问。这也会更好,因为您不会经常打开和关闭文件。

最后,最具限制性的选项是在数据库上设置一个触发器,为您进行填充。您必须将 json 存储在数据库中的某个位置。这种方法的另一个好处是您可以编写一个 django 前端来更新 json。缺点是它会将您的应用程序限制为您决定使用触发器支持的那些数据库。

于 2012-10-25T14:07:07.113 回答