You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
54 lines
1.4 KiB
54 lines
1.4 KiB
#!/usr/bin/env python
|
|
import os
|
|
from json import dump
|
|
from django import setup
|
|
|
|
|
|
class BatchSaveStreamList(list):
|
|
def __init__(self, model_class, model_name, *args, **kwargs):
|
|
super().__init__(*args, **kwargs)
|
|
self._model_class = model_class
|
|
self._model_name = model_name
|
|
|
|
def __iter__(self):
|
|
def fields(obj):
|
|
return {ob.name: getattr(obj, ob.name) or None for ob in obj._meta.concrete_fields if ob.name != 'id'}
|
|
|
|
for d in self._model_class.objects.all().iterator():
|
|
yield {
|
|
"model": self._model_name,
|
|
"pk": d.pk,
|
|
"fields": fields(d)
|
|
}
|
|
|
|
def __len__(self):
|
|
return 1
|
|
|
|
|
|
def batch_save(fname, model_class, model_name):
|
|
sa = BatchSaveStreamList(
|
|
model_class=model_class,
|
|
model_name=model_name
|
|
)
|
|
with open(fname, 'w') as f:
|
|
dump(sa, f, ensure_ascii=False, indent=2)
|
|
|
|
|
|
# ---------------------
|
|
|
|
|
|
def dump_groups():
|
|
from group_app.models import Group
|
|
batch_save("groups.json", Group, 'groupapp.group')
|
|
|
|
|
|
def dump_accounts():
|
|
from accounts_app.models import UserProfile, BaseAccount
|
|
batch_save('accounts_baseaccount.json', BaseAccount, 'profiles.baseaccount')
|
|
batch_save('accounts_userprofile.json', UserProfile, 'profiles.userprofile')
|
|
|
|
|
|
if __name__ == '__main__':
|
|
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'djing.settings')
|
|
setup()
|
|
dump_groups()
|