gpt4 book ai didi

具有特定数据的 Django 装置

转载 作者:行者123 更新时间:2023-12-01 04:43:19 28 4
gpt4 key购买 nike

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

class A(Model):
# ...

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

class C(Model):
b = ForeignKey(B)
# ...

在我的生产数据库中,我有数百个 A 类型的对象,下面有数千个子对象。我现在只想为(特定的)少数对象创建一个装置。如果我运行这个命令,我的输出会变得很大:
python manage.py dumpdata ca_myapp -o /tmp/my_app_dump.json

但是,当我使用此命令限制输出时:
python manage.py dumpdata ca_myapp.A -o /tmp/myapp_dump.json --pks pk1, pk2, pk3

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

最佳答案

我现在已经编写了一个 Django 命令,它首先检查我想要获取哪些 pk 以及它们有哪些 child ,以获取所有相关对象。

import logging
import os

from django.core.management import BaseCommand, call_command

logger = logging.getLogger(__name__)

A = {'pk1', 'pk2', 'pk3'}

class Command(BaseCommand):
def __init__(self, stdout=None, stderr=None, no_color=False):
super().__init__(stdout, stderr, no_color)
self.settings = None
self.a = set()

@property
def tmp_dir(self):
return '/tmp'

def handle(self, *args, **options):
self.settings = options.get('settings')

# TODO: Make list of A an optional argument
a_pks = A
self.dump_objects('ca_myapp.A', pks=a_pks)

b_pks = B.objects.filter(a_id__in=a_pks).values_list('pk', flat=True)
self.dump_objects('ca_myapp.B', pks=b_pks)

c_pks = C.objects.filter(b_id__in=b_pks).values_list('pk', flat=True)
self.dump_objects('ca_myapp.C', pks=c_pks)

def dump_objects(self, model_name: str, pks: set):
if pks:
call_command('dumpdata', model_name,
'--pks', ','.join(pks),
'--indent', '2',
'-o', os.path.join(self.tmp_dir, '{}.json'.format(model_name)),
'--settings', self.settings)
else:
logger.warning('No objects for model {} found'.format(model_name))

关于具有特定数据的 Django 装置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48886558/

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