gpt4 book ai didi

django - 如何创建 Django 数据库备份?

转载 作者:行者123 更新时间:2023-12-02 09:32:31 25 4
gpt4 key购买 nike

我运行多个(或多或少)相同的 Django (1.11) 部署,这些部署在完全相同的架构上运行,但设置不同(我创建了自己的 Settings 模型)。这些Settings 模型中的值(其中有很多)对于每个部署都是不同的,因此这些站点可能会根据设置的不同而显示不同。

出现了一项业务需求,要求我定期从一个堆栈导出这些Settings模型(DisplaySettingsCurrencySettings等),并将它们导入到另一个堆栈中。我知道 dumpdataloaddata 以 JSON 文件的形式提供基本功能,但我还需要业务方面的这些额外功能:

  1. 管理员必须能够选择要导出的设置,包括这些设置中可能存在的 ForeignKeyManyToManyField 关系。
  2. 导入该文件时,管理员必须能够选择要导入文件中的哪些设置以及导入方式(更新现有设置模型或创建新设置模型)。
  3. 可以将相同的导出文件重新导入到同一堆栈中,以创建这些设置的重复副本。

以下是我迄今为止尝试过的解决方案:

  1. dumpdata/loaddata:不需要“选择要导入/导出的设置”要求。
  2. django-import-export:仅支持表格结构的导出,即外键不能作为设置记录的一部分导出。
  3. django-easydump:完全不相关的包,用于将转储上传到 s3。可以指定要包含哪些模型,但不能指定要包含每个模型中的属性。
  4. djangorestframework中编写自定义嵌套ModelSerializer:可行但乏味。需要自定义前端来处理第一个要求。

我的问题是:是否已经有一种内置方法可以按照描述执行导入/导出,或者如果没有,是否有任何合格的第三方包(上面未列出)我显然错过了?

最佳答案

没有任何内置功能可以满足您的所有要求。

如果所有部署中的架构都相同,最简单的方法就是为每个模型设置 drf 端点。除非我遗漏了一些东西,否则它们不需要嵌套。

def import_currency_settings(new=False, remove_fields=[]):
endpoint = default_domain + '/currency_settings/'
settings = requests.get(endpoint, auth=(api_user, api_pass)).json()
for setting in settings:
for field in remove_fields:
setting.pop(field, None)
if new:
CurrencySettings.objects.create(**setting)
else:
updated = setting
updated.pop('id', None)
CurrencySettings.update_or_create(
id=setting['id'],
fields=updated
)

import_currency_settings(new=True, remove_fields=['vat'])

关于django - 如何创建 Django 数据库备份?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50277362/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com