具有特定数据的 Django 装置

phy*_*ion 5 django fixtures django-fixtures

我有一个包含 3 个模型的应用程序,这些模型以父子方式相互引用:

class A(Model):
    # ...

class B(Model):
    a = ForeignKey(A)
    # ...

class C(Model):
    b = ForeignKey(B)
    # ...
Run Code Online (Sandbox Code Playgroud)

在我的生产数据库中,我有数百个 A 类型的对象,其下面有数千个子对象。我现在只想为少数(特定)对象创建一个固定装置。如果我运行这个命令,我的输出将变得巨大:

python manage.py dumpdata ca_myapp -o /tmp/my_app_dump.json
Run Code Online (Sandbox Code Playgroud)

但是,当我使用此命令限制输出时:

python manage.py dumpdata ca_myapp.A -o /tmp/myapp_dump.json --pks pk1, pk2, pk3
Run Code Online (Sandbox Code Playgroud)

然后只有 A 对象被反序列化,而不是它们的子对象。如何轻松创建包含少量对象及其子对象的夹具文件?

ikl*_*nac 1

来自关于 dumpdata 的 Django 文档

转储数据

django-admin dumpdata [app_label[.ModelName] [app_label[.ModelName]...]]

所以在你的情况下

python manage.py dumpdata ca_myapp.A ca_myapp.B ca_myapp.C
Run Code Online (Sandbox Code Playgroud)

另一种方法是使用排除

--排除排除, -e 排除

防止转储特定应用程序或模型(以 app_label.ModelName 的形式指定)。如果指定模型名称,输出将仅限于该模型,而不是整个应用程序。您还可以混合应用程序名称和型号名称。

如果要排除多个应用程序,请多次传递 --exclude


如果我没有正确理解问题,并且您询问是否可以仅选择几个 pks 并遵循它们目前无法使用 dumpdata 的关系,但您可以轻松地准备数据库以仅保存必要的数据。